/*
 Navicat Premium Data Transfer

 Source Server         : 192.168.1.13
 Source Server Type    : MySQL
 Source Server Version : 80021
 Source Host           : 192.168.1.13:3306
 Source Schema         : newguanfang

 Target Server Type    : MySQL
 Target Server Version : 80021
 File Encoding         : 65001

 Date: 04/07/2021 09:00:44
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for kuo_admin
-- ----------------------------
DROP TABLE IF EXISTS `kuo_admin`;
CREATE TABLE `kuo_admin` (
  `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `account` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '管理帐号',
  `password` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '管理密码',
  `area` bigint unsigned DEFAULT '0' COMMENT '地区',
  `super` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '超级密码',
  `groups` int unsigned DEFAULT '0' COMMENT '管理组权限',
  `verifyip` tinyint unsigned DEFAULT '0' COMMENT '强行验证用户ip',
  `off` tinyint unsigned DEFAULT '0' COMMENT '帐号开关',
  `ip` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '登录ip',
  `atime` int unsigned DEFAULT '0' COMMENT '登录时间',
  `sessionid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `id` (`id`),
  KEY `account` (`account`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='管理员';

-- ----------------------------
-- Records of kuo_admin
-- ----------------------------
BEGIN;
INSERT INTO `kuo_admin` VALUES (1, 'admin', 'cac01bfe0422801a36', 0, '', 0, 0, 1, '192.168.1.13', 1625357133, 'q6r2bq2k65v0893dap57uj07o29ou11la6g28k2ym5rhbu3k9x5s47r7r294m1xi');
COMMIT;

-- ----------------------------
-- Table structure for kuo_admingroup
-- ----------------------------
DROP TABLE IF EXISTS `kuo_admingroup`;
CREATE TABLE `kuo_admingroup` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '权限组名字',
  `describes` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '描述',
  `competence` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '权限',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='管理权限组';

-- ----------------------------
-- Table structure for kuo_adminlog
-- ----------------------------
DROP TABLE IF EXISTS `kuo_adminlog`;
CREATE TABLE `kuo_adminlog` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '日志id',
  `uid` bigint unsigned DEFAULT '0' COMMENT '管理uid',
  `type` int unsigned DEFAULT '0' COMMENT '日志类型',
  `data` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '详细数据',
  `ip` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '产生ip',
  `atime` int unsigned DEFAULT '0' COMMENT '时间',
  `controller` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '控制器',
  `mode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '处理方式',
  PRIMARY KEY (`id`),
  KEY `uid` (`uid`),
  KEY `type` (`type`),
  KEY `controller` (`controller`(250)),
  KEY `mode` (`mode`(250))
) ENGINE=InnoDB AUTO_INCREMENT=273 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='管理员日志';

-- ----------------------------
-- Records of kuo_adminlog
-- ----------------------------
BEGIN;
INSERT INTO `kuo_adminlog` VALUES (208, 1, 0, '', '192.168.1.13', 1625238280, 'admin', 'login');
INSERT INTO `kuo_adminlog` VALUES (209, 1, 3, '{\"yuan\":{\"id\":2,\"pluginid\":\"cms\",\"type\":\"cms\",\"typeico\":\"layui-icon-website\",\"name\":\"cms系统\",\"describes\":\"常用cms 系统\",\"author\":\"U\",\"authorlink\":\"http://www.elikj.com\",\"version\":\"1\",\"off\":1,\"branch\":\"\",\"atime\":1590801009,\"authorizedid\":\"\",\"authorizedkey\":\"\",\"configure\":\"{\\\"列表模版\\\":[\\\"gonglist\\\",\\\"ztlist\\\"],\\\"内容模版\\\":[\\\"gonglv\\\",\\\"paihang\\\",\\\"zhuanti\\\"],\\\"默认前缀\\\":[\\\"list-\\\",\\\"\\\"],\\\"默认风格\\\":[\\\"game\\\"],\\\"网站信息id\\\":[\\\"13\\\"],\\\"缓存时间\\\":[\\\"0\\\"],\\\"游戏id\\\":[\\\"1\\\"],\\\"排行id\\\":[\\\"4\\\"],\\\"攻略id\\\":[\\\"3\\\"],\\\"语言下标\\\":[\\\"1\\\"]}\",\"display\":1,\"callfunction\":\"index\",\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"main\":0},\"data\":{\"off\":1,\"authorizedkey\":\"\",\"name\":\"cms系统\",\"typeico\":\"layui-icon-website\",\"type\":\"cms\",\"callfunction\":\"index\",\"authorizedid\":\"\",\"display\":1,\"main\":0,\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"configure\":\"{\\\"列表模版\\\":{\\\"0\\\":\\\"gonglist\\\",\\\"1\\\":\\\"ztlist\\\"},\\\"内容模版\\\":{\\\"0\\\":\\\"gonglv\\\",\\\"1\\\":\\\"paihang\\\",\\\"2\\\":\\\"zhuanti\\\"},\\\"默认前缀\\\":{\\\"0\\\":\\\"list-\\\",\\\"1\\\":\\\"\\\"},\\\"默认风格\\\":{\\\"0\\\":\\\"game\\\"},\\\"网站信息id\\\":{\\\"0\\\":\\\"13\\\"},\\\"缓存时间\\\":{\\\"0\\\":\\\"0\\\"},\\\"游戏id\\\":{\\\"0\\\":\\\"1\\\"},\\\"排行id\\\":{\\\"0\\\":\\\"4\\\"},\\\"攻略id\\\":{\\\"0\\\":\\\"3\\\"},\\\"语言下标\\\":{\\\"0\\\":\\\"1\\\"}}\"}}', '192.168.1.13', 1625238607, 'admin', 'features');
INSERT INTO `kuo_adminlog` VALUES (210, 1, 0, '', '192.168.1.13', 1625274767, 'admin', 'login');
INSERT INTO `kuo_adminlog` VALUES (211, 1, 0, '', '192.168.1.13', 1625301885, 'admin', 'login');
INSERT INTO `kuo_adminlog` VALUES (212, 1, 3, '{\"yuan\":{\"id\":2,\"pluginid\":\"cms\",\"type\":\"cms\",\"typeico\":\"layui-icon-website\",\"name\":\"cms系统\",\"describes\":\"常用cms 系统\",\"author\":\"U\",\"authorlink\":\"http://www.elikj.com\",\"version\":\"1\",\"off\":1,\"branch\":\"\",\"atime\":1590801009,\"authorizedid\":\"\",\"authorizedkey\":\"\",\"configure\":\"{\\\"列表模版\\\":{\\\"0\\\":\\\"gonglist\\\",\\\"1\\\":\\\"ztlist\\\"},\\\"内容模版\\\":{\\\"0\\\":\\\"gonglv\\\",\\\"1\\\":\\\"paihang\\\",\\\"2\\\":\\\"zhuanti\\\"},\\\"默认前缀\\\":{\\\"0\\\":\\\"list-\\\",\\\"1\\\":\\\"\\\"},\\\"默认风格\\\":{\\\"0\\\":\\\"game\\\"},\\\"网站信息id\\\":{\\\"0\\\":\\\"13\\\"},\\\"缓存时间\\\":{\\\"0\\\":\\\"0\\\"},\\\"游戏id\\\":{\\\"0\\\":\\\"1\\\"},\\\"排行id\\\":{\\\"0\\\":\\\"4\\\"},\\\"攻略id\\\":{\\\"0\\\":\\\"3\\\"},\\\"语言下标\\\":{\\\"0\\\":\\\"1\\\"}}\",\"display\":1,\"callfunction\":\"index\",\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"main\":0},\"data\":{\"off\":1,\"authorizedkey\":\"\",\"name\":\"cms系统\",\"typeico\":\"layui-icon-website\",\"type\":\"cms\",\"callfunction\":\"index\",\"authorizedid\":\"\",\"display\":1,\"main\":0,\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"configure\":\"{\\\"列表模版\\\":{\\\"0\\\":\\\"shoplist\\\"},\\\"内容模版\\\":{\\\"0\\\":\\\"shopneirong\\\"},\\\"默认前缀\\\":{\\\"0\\\":\\\"list-\\\",\\\"1\\\":\\\"\\\"},\\\"默认风格\\\":{\\\"0\\\":\\\"blog\\\"},\\\"网站信息id\\\":{\\\"0\\\":\\\"1\\\"},\\\"缓存时间\\\":{\\\"0\\\":\\\"0\\\"}}\"}}', '192.168.1.13', 1625302451, 'admin', 'features');
INSERT INTO `kuo_adminlog` VALUES (213, 1, 4, '{\"id\":\"0\",\"name\":\"阔老板\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"list-1\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"0\",\"displayswitch\":\"0\",\"templatetype\":\"1\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0.00\",\"float2\":\"0.00\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"expansion\":\"\"}', '192.168.1.13', 1625302511, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (214, 1, 4, '{\"id\":\"0\",\"name\":\"插件扩展\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"list-2\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"1\",\"listtemplate\":\"shoplist\",\"contenttemplate\":\"shopneirong\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0.00\",\"float2\":\"0.00\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"expansion\":\"\"}', '192.168.1.13', 1625302527, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (215, 1, 4, '{\"id\":\"0\",\"name\":\"风格模版\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"list-3\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"1\",\"listtemplate\":\"shoplist\",\"contenttemplate\":\"shopneirong\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0.00\",\"float2\":\"0.00\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"expansion\":\"\"}', '192.168.1.13', 1625302543, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (216, 1, 4, '{\"id\":\"0\",\"name\":\"教程文档\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"list-4\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"1\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0.00\",\"float2\":\"0.00\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"expansion\":\"\"}', '192.168.1.13', 1625302553, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (217, 1, 4, '{\"id\":\"0\",\"name\":\"开发笔记\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"list-5\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"1\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0.00\",\"float2\":\"0.00\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"expansion\":\"\"}', '192.168.1.13', 1625302562, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (218, 1, 4, '{\"id\":\"0\",\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"list-6\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"0\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0.00\",\"float2\":\"0.00\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"expansion\":\"\"}', '192.168.1.13', 1625302573, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (219, 1, 0, '', '192.168.1.13', 1625305945, 'admin', 'login');
INSERT INTO `kuo_adminlog` VALUES (220, 1, 3, '{\"yuan\":{\"id\":1,\"name\":\"阔老板\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"list-1\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":1,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":0,\"displayswitch\":0,\"off\":0,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"1\",\"name\":\"阔老板\",\"keywords\":\"\",\"describes\":\"Node.js JavasSript服务框架是为了简化企业级应用敏捷开发而诞生的\",\"subclass\":\"0\",\"url\":\"list-1\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"0\",\"displayswitch\":\"0\",\"templatetype\":\"1\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625305967,\"expansion\":\"\"}}', '192.168.1.13', 1625305967, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (221, 1, 3, '{\"yuan\":{\"id\":1,\"name\":\"阔老板\",\"keywords\":\"\",\"describes\":\"Node.js JavasSript服务框架是为了简化企业级应用敏捷开发而诞生的\",\"subclass\":0,\"url\":\"list-1\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":1,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625305967,\"displayswitch\":0,\"off\":0,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"1\",\"name\":\"阔老板\",\"keywords\":\"\",\"describes\":\"Node.js JavasSript服务框架是为了简化企业级应用敏捷开发而诞生的\",\"subclass\":\"0\",\"url\":\"list-1\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"© <a href=\\\"https://www.laruence.com\\\" title=\\\"Home\\\">风雪之隅</a>/ <a href=\\\"http://www.php.net\\\" target=\\\"_blank\\\"><img src=\\\"https://www.laruence.com/images/php_logo.png\\\"></a>/ <a href=\\\"https://www.laruence.com/licence\\\" title=\\\"licence\\\" rel=\\\"licence copyright\\\">博客声明</a>/ <a href=\\\"http://www.miibeian.gov.cn\\\" target=\\\"_blank\\\">京ICP备15032766号</a>/ Theme By <a href=\\\"https://www.competethemes.com/period/\\\" title=\\\"Period\\\">Compete Themes</a>\",\"off\":\"0\",\"displayswitch\":\"0\",\"templatetype\":\"1\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625306180,\"expansion\":\"\"}}', '192.168.1.13', 1625306180, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (222, 1, 3, '{\"yuan\":{\"id\":2,\"pluginid\":\"cms\",\"type\":\"cms\",\"typeico\":\"layui-icon-website\",\"name\":\"cms系统\",\"describes\":\"常用cms 系统\",\"author\":\"U\",\"authorlink\":\"http://www.elikj.com\",\"version\":\"1\",\"off\":1,\"branch\":\"\",\"atime\":1590801009,\"authorizedid\":\"\",\"authorizedkey\":\"\",\"configure\":\"{\\\"列表模版\\\":{\\\"0\\\":\\\"shoplist\\\"},\\\"内容模版\\\":{\\\"0\\\":\\\"shopneirong\\\"},\\\"默认前缀\\\":{\\\"0\\\":\\\"list-\\\",\\\"1\\\":\\\"\\\"},\\\"默认风格\\\":{\\\"0\\\":\\\"blog\\\"},\\\"网站信息id\\\":{\\\"0\\\":\\\"1\\\"},\\\"缓存时间\\\":{\\\"0\\\":\\\"0\\\"}}\",\"display\":1,\"callfunction\":\"index\",\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"main\":0},\"data\":{\"off\":1,\"authorizedkey\":\"\",\"name\":\"cms系统\",\"typeico\":\"layui-icon-website\",\"type\":\"cms\",\"callfunction\":\"index\",\"authorizedid\":\"\",\"display\":1,\"main\":0,\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"configure\":\"{\\\"6767\\\":{\\\"0\\\":\\\"\\\"},\\\"列表模版\\\":{\\\"0\\\":\\\"shoplist\\\"},\\\"内容模版\\\":{\\\"0\\\":\\\"shopneirong\\\"},\\\"默认前缀\\\":{\\\"0\\\":\\\"list-\\\",\\\"1\\\":\\\"\\\"},\\\"默认风格\\\":{\\\"0\\\":\\\"blog\\\"},\\\"网站信息id\\\":{\\\"0\\\":\\\"1\\\"},\\\"缓存时间\\\":{\\\"0\\\":\\\"0\\\"}}\"}}', '192.168.1.13', 1625306532, 'admin', 'features');
INSERT INTO `kuo_adminlog` VALUES (223, 1, 3, '{\"yuan\":{\"id\":2,\"pluginid\":\"cms\",\"type\":\"cms\",\"typeico\":\"layui-icon-website\",\"name\":\"cms系统\",\"describes\":\"常用cms 系统\",\"author\":\"U\",\"authorlink\":\"http://www.elikj.com\",\"version\":\"1\",\"off\":1,\"branch\":\"\",\"atime\":1590801009,\"authorizedid\":\"\",\"authorizedkey\":\"\",\"configure\":\"{\\\"6767\\\":{\\\"0\\\":\\\"\\\"},\\\"列表模版\\\":{\\\"0\\\":\\\"shoplist\\\"},\\\"内容模版\\\":{\\\"0\\\":\\\"shopneirong\\\"},\\\"默认前缀\\\":{\\\"0\\\":\\\"list-\\\",\\\"1\\\":\\\"\\\"},\\\"默认风格\\\":{\\\"0\\\":\\\"blog\\\"},\\\"网站信息id\\\":{\\\"0\\\":\\\"1\\\"},\\\"缓存时间\\\":{\\\"0\\\":\\\"0\\\"}}\",\"display\":1,\"callfunction\":\"index\",\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"main\":0},\"data\":{\"off\":1,\"authorizedkey\":\"\",\"name\":\"cms系统\",\"typeico\":\"layui-icon-website\",\"type\":\"cms\",\"callfunction\":\"index\",\"authorizedid\":\"\",\"display\":1,\"main\":0,\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"configure\":\"{\\\"列表模版\\\":{\\\"0\\\":\\\"shoplist\\\"},\\\"内容模版\\\":{\\\"0\\\":\\\"shopneirong\\\"},\\\"默认前缀\\\":{\\\"0\\\":\\\"list-\\\",\\\"1\\\":\\\"\\\"},\\\"默认风格\\\":{\\\"0\\\":\\\"blog\\\"},\\\"网站信息id\\\":{\\\"0\\\":\\\"1\\\"},\\\"缓存时间\\\":{\\\"0\\\":\\\"0\\\"}}\"}}', '192.168.1.13', 1625306799, 'admin', 'features');
INSERT INTO `kuo_adminlog` VALUES (224, 1, 3, '{\"yuan\":{\"id\":2,\"pluginid\":\"cms\",\"type\":\"cms\",\"typeico\":\"layui-icon-website\",\"name\":\"cms系统\",\"describes\":\"常用cms 系统\",\"author\":\"U\",\"authorlink\":\"http://www.elikj.com\",\"version\":\"1\",\"off\":1,\"branch\":\"\",\"atime\":1590801009,\"authorizedid\":\"\",\"authorizedkey\":\"\",\"configure\":\"{\\\"列表模版\\\":{\\\"0\\\":\\\"shoplist\\\"},\\\"内容模版\\\":{\\\"0\\\":\\\"shopneirong\\\"},\\\"默认前缀\\\":{\\\"0\\\":\\\"list-\\\",\\\"1\\\":\\\"\\\"},\\\"默认风格\\\":{\\\"0\\\":\\\"blog\\\"},\\\"网站信息id\\\":{\\\"0\\\":\\\"1\\\"},\\\"缓存时间\\\":{\\\"0\\\":\\\"0\\\"}}\",\"display\":1,\"callfunction\":\"index\",\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"main\":0},\"data\":{\"off\":1,\"authorizedkey\":\"\",\"name\":\"cms系统\",\"typeico\":\"layui-icon-website\",\"type\":\"cms\",\"callfunction\":\"index\",\"authorizedid\":\"\",\"display\":1,\"main\":0,\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"configure\":\"{\\\"65856\\\":{\\\"0\\\":\\\"\\\"},\\\"列表模版\\\":{\\\"0\\\":\\\"shoplist\\\"},\\\"内容模版\\\":{\\\"0\\\":\\\"shopneirong\\\"},\\\"默认前缀\\\":{\\\"0\\\":\\\"list-\\\",\\\"1\\\":\\\"\\\"},\\\"默认风格\\\":{\\\"0\\\":\\\"blog\\\"},\\\"网站信息id\\\":{\\\"0\\\":\\\"1\\\"},\\\"缓存时间\\\":{\\\"0\\\":\\\"0\\\"}}\"}}', '192.168.1.13', 1625306830, 'admin', 'features');
INSERT INTO `kuo_adminlog` VALUES (225, 1, 3, '{\"yuan\":{\"id\":2,\"pluginid\":\"cms\",\"type\":\"cms\",\"typeico\":\"layui-icon-website\",\"name\":\"cms系统\",\"describes\":\"常用cms 系统\",\"author\":\"U\",\"authorlink\":\"http://www.elikj.com\",\"version\":\"1\",\"off\":1,\"branch\":\"\",\"atime\":1590801009,\"authorizedid\":\"\",\"authorizedkey\":\"\",\"configure\":\"{\\\"65856\\\":{\\\"0\\\":\\\"\\\"},\\\"列表模版\\\":{\\\"0\\\":\\\"shoplist\\\"},\\\"内容模版\\\":{\\\"0\\\":\\\"shopneirong\\\"},\\\"默认前缀\\\":{\\\"0\\\":\\\"list-\\\",\\\"1\\\":\\\"\\\"},\\\"默认风格\\\":{\\\"0\\\":\\\"blog\\\"},\\\"网站信息id\\\":{\\\"0\\\":\\\"1\\\"},\\\"缓存时间\\\":{\\\"0\\\":\\\"0\\\"}}\",\"display\":1,\"callfunction\":\"index\",\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"main\":0},\"data\":{\"off\":1,\"authorizedkey\":\"\",\"name\":\"cms系统\",\"typeico\":\"layui-icon-website\",\"type\":\"cms\",\"callfunction\":\"index\",\"authorizedid\":\"\",\"display\":1,\"main\":0,\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"configure\":\"{\\\"65856\\\":{\\\"0\\\":\\\"\\\"},\\\"列表模版\\\":{\\\"0\\\":\\\"shoplist\\\"},\\\"内容模版\\\":{\\\"0\\\":\\\"shopneirong\\\"},\\\"默认前缀\\\":{\\\"0\\\":\\\"list-\\\",\\\"1\\\":\\\"\\\"},\\\"默认风格\\\":{\\\"0\\\":\\\"blog\\\"},\\\"网站信息id\\\":{\\\"0\\\":\\\"1\\\"},\\\"缓存时间\\\":{\\\"0\\\":\\\"0\\\"}}\"}}', '192.168.1.13', 1625306969, 'admin', 'features');
INSERT INTO `kuo_adminlog` VALUES (226, 1, 3, '{\"yuan\":{\"id\":2,\"pluginid\":\"cms\",\"type\":\"cms\",\"typeico\":\"layui-icon-website\",\"name\":\"cms系统\",\"describes\":\"常用cms 系统\",\"author\":\"U\",\"authorlink\":\"http://www.elikj.com\",\"version\":\"1\",\"off\":1,\"branch\":\"\",\"atime\":1590801009,\"authorizedid\":\"\",\"authorizedkey\":\"\",\"configure\":\"{\\\"65856\\\":{\\\"0\\\":\\\"\\\"},\\\"列表模版\\\":{\\\"0\\\":\\\"shoplist\\\"},\\\"内容模版\\\":{\\\"0\\\":\\\"shopneirong\\\"},\\\"默认前缀\\\":{\\\"0\\\":\\\"list-\\\",\\\"1\\\":\\\"\\\"},\\\"默认风格\\\":{\\\"0\\\":\\\"blog\\\"},\\\"网站信息id\\\":{\\\"0\\\":\\\"1\\\"},\\\"缓存时间\\\":{\\\"0\\\":\\\"0\\\"}}\",\"display\":1,\"callfunction\":\"index\",\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"main\":0},\"data\":{\"off\":1,\"authorizedkey\":\"\",\"name\":\"cms系统\",\"typeico\":\"layui-icon-website\",\"type\":\"cms\",\"callfunction\":\"index\",\"authorizedid\":\"\",\"display\":1,\"main\":0,\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"configure\":\"{\\\"列表模版\\\":{\\\"0\\\":\\\"shoplist\\\"},\\\"内容模版\\\":{\\\"0\\\":\\\"shopneirong\\\"},\\\"默认前缀\\\":{\\\"0\\\":\\\"list-\\\",\\\"1\\\":\\\"\\\"},\\\"默认风格\\\":{\\\"0\\\":\\\"blog\\\"},\\\"网站信息id\\\":{\\\"0\\\":\\\"1\\\"},\\\"缓存时间\\\":{\\\"0\\\":\\\"0\\\"}}\"}}', '192.168.1.13', 1625307020, 'admin', 'features');
INSERT INTO `kuo_adminlog` VALUES (227, 1, 3, '{\"yuan\":{\"id\":2,\"pluginid\":\"cms\",\"type\":\"cms\",\"typeico\":\"layui-icon-website\",\"name\":\"cms系统\",\"describes\":\"常用cms 系统\",\"author\":\"U\",\"authorlink\":\"http://www.elikj.com\",\"version\":\"1\",\"off\":1,\"branch\":\"\",\"atime\":1590801009,\"authorizedid\":\"\",\"authorizedkey\":\"\",\"configure\":\"{\\\"列表模版\\\":{\\\"0\\\":\\\"shoplist\\\"},\\\"内容模版\\\":{\\\"0\\\":\\\"shopneirong\\\"},\\\"默认前缀\\\":{\\\"0\\\":\\\"list-\\\",\\\"1\\\":\\\"\\\"},\\\"默认风格\\\":{\\\"0\\\":\\\"blog\\\"},\\\"网站信息id\\\":{\\\"0\\\":\\\"1\\\"},\\\"缓存时间\\\":{\\\"0\\\":\\\"0\\\"}}\",\"display\":1,\"callfunction\":\"index\",\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"main\":0},\"data\":{\"off\":1,\"authorizedkey\":\"\",\"name\":\"cms系统\",\"typeico\":\"layui-icon-website\",\"type\":\"cms\",\"callfunction\":\"index\",\"authorizedid\":\"\",\"display\":1,\"main\":0,\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"configure\":\"{\\\"列表模版\\\":{\\\"0\\\":\\\"shoplist\\\"},\\\"内容模版\\\":{\\\"0\\\":\\\"shopneirong\\\"},\\\"默认前缀\\\":{\\\"0\\\":\\\"list-\\\",\\\"1\\\":\\\"\\\"},\\\"默认风格\\\":{\\\"0\\\":\\\"blog\\\"},\\\"网站信息id\\\":{\\\"0\\\":\\\"1\\\"},\\\"缓存时间\\\":{\\\"0\\\":\\\"0\\\"}}\"}}', '192.168.1.13', 1625307180, 'admin', 'features');
INSERT INTO `kuo_adminlog` VALUES (228, 1, 3, '{\"yuan\":{\"id\":1,\"name\":\"阔老板\",\"keywords\":\"\",\"describes\":\"Node.js JavasSript服务框架是为了简化企业级应用敏捷开发而诞生的\",\"subclass\":0,\"url\":\"list-1\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":1,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"© <a href=\\\"https://www.laruence.com\\\" title=\\\"Home\\\">风雪之隅</a>/ <a href=\\\"http://www.php.net\\\" target=\\\"_blank\\\"><img src=\\\"https://www.laruence.com/images/php_logo.png\\\"></a>/ <a href=\\\"https://www.laruence.com/licence\\\" title=\\\"licence\\\" rel=\\\"licence copyright\\\">博客声明</a>/ <a href=\\\"http://www.miibeian.gov.cn\\\" target=\\\"_blank\\\">京ICP备15032766号</a>/ Theme By <a href=\\\"https://www.competethemes.com/period/\\\" title=\\\"Period\\\">Compete Themes</a>\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625306180,\"displayswitch\":0,\"off\":0,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"1\",\"name\":\"阔老板\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"list-1\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"© <a href=\\\"https://www.laruence.com\\\" title=\\\"Home\\\">风雪之隅</a>/ <a href=\\\"http://www.php.net\\\" target=\\\"_blank\\\"><img src=\\\"https://www.laruence.com/images/php_logo.png\\\"></a>/ <a href=\\\"https://www.laruence.com/licence\\\" title=\\\"licence\\\" rel=\\\"licence copyright\\\">博客声明</a>/ <a href=\\\"http://www.miibeian.gov.cn\\\" target=\\\"_blank\\\">京ICP备15032766号</a>/ Theme By <a href=\\\"https://www.competethemes.com/period/\\\" title=\\\"Period\\\">Compete Themes</a>\",\"off\":\"0\",\"displayswitch\":\"0\",\"templatetype\":\"1\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625307190,\"expansion\":\"\"}}', '192.168.1.13', 1625307190, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (229, 1, 3, '{\"yuan\":{\"id\":1,\"name\":\"阔老板\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"list-1\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":1,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"© <a href=\\\"https://www.laruence.com\\\" title=\\\"Home\\\">风雪之隅</a>/ <a href=\\\"http://www.php.net\\\" target=\\\"_blank\\\"><img src=\\\"https://www.laruence.com/images/php_logo.png\\\"></a>/ <a href=\\\"https://www.laruence.com/licence\\\" title=\\\"licence\\\" rel=\\\"licence copyright\\\">博客声明</a>/ <a href=\\\"http://www.miibeian.gov.cn\\\" target=\\\"_blank\\\">京ICP备15032766号</a>/ Theme By <a href=\\\"https://www.competethemes.com/period/\\\" title=\\\"Period\\\">Compete Themes</a>\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625307190,\"displayswitch\":0,\"off\":0,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"1\",\"name\":\"阔老板\",\"keywords\":\"\",\"describes\":\"Node.js JavasSript服务框架是为了简化企业级应用敏捷开发而诞生的\",\"subclass\":\"0\",\"url\":\"list-1\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"© <a href=\\\"https://www.laruence.com\\\" title=\\\"Home\\\">风雪之隅</a>/ <a href=\\\"http://www.php.net\\\" target=\\\"_blank\\\"><img src=\\\"https://www.laruence.com/images/php_logo.png\\\"></a>/ <a href=\\\"https://www.laruence.com/licence\\\" title=\\\"licence\\\" rel=\\\"licence copyright\\\">博客声明</a>/ <a href=\\\"http://www.miibeian.gov.cn\\\" target=\\\"_blank\\\">京ICP备15032766号</a>/ Theme By <a href=\\\"https://www.competethemes.com/period/\\\" title=\\\"Period\\\">Compete Themes</a>\",\"off\":\"0\",\"displayswitch\":\"0\",\"templatetype\":\"1\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625307432,\"expansion\":\"\"}}', '192.168.1.13', 1625307432, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (230, 1, 3, '{\"yuan\":{\"id\":1,\"name\":\"阔老板\",\"keywords\":\"\",\"describes\":\"Node.js JavasSript服务框架是为了简化企业级应用敏捷开发而诞生的\",\"subclass\":0,\"url\":\"list-1\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":1,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"© <a href=\\\"https://www.laruence.com\\\" title=\\\"Home\\\">风雪之隅</a>/ <a href=\\\"http://www.php.net\\\" target=\\\"_blank\\\"><img src=\\\"https://www.laruence.com/images/php_logo.png\\\"></a>/ <a href=\\\"https://www.laruence.com/licence\\\" title=\\\"licence\\\" rel=\\\"licence copyright\\\">博客声明</a>/ <a href=\\\"http://www.miibeian.gov.cn\\\" target=\\\"_blank\\\">京ICP备15032766号</a>/ Theme By <a href=\\\"https://www.competethemes.com/period/\\\" title=\\\"Period\\\">Compete Themes</a>\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625307432,\"displayswitch\":0,\"off\":0,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"1\",\"name\":\"阔老板\",\"keywords\":\"\",\"describes\":\"Node.js JavasSript服务框架是为了简化企业级应用敏捷开发而诞生的\",\"subclass\":\"0\",\"url\":\"list-1\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"阔老板\",\"off\":\"0\",\"displayswitch\":\"0\",\"templatetype\":\"1\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625307660,\"expansion\":\"\"}}', '192.168.1.13', 1625307660, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (231, 1, 3, '{\"yuan\":{\"id\":1,\"name\":\"阔老板\",\"keywords\":\"\",\"describes\":\"Node.js JavasSript服务框架是为了简化企业级应用敏捷开发而诞生的\",\"subclass\":0,\"url\":\"list-1\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":1,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"阔老板\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625307660,\"displayswitch\":0,\"off\":0,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"1\",\"name\":\"阔老板\",\"keywords\":\"\",\"describes\":\"Node.js JavasSript服务框架是为了简化企业级应用敏捷开发而诞生的\",\"subclass\":\"0\",\"url\":\"list-1\",\"link\":\"\",\"photo\":\"/attachment/2021-7/png/6ea0e7e30b17a842a188b9c4fcdbc21c.png\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"阔老板\",\"off\":\"0\",\"displayswitch\":\"0\",\"templatetype\":\"1\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"13yd 开源项目作者.\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625311072,\"expansion\":\"\"}}', '192.168.1.13', 1625311072, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (232, 1, 4, '{\"id\":\"0\",\"name\":\"PHP8新特性之match表达式\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"4\",\"url\":\"2\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\\n<div class=\\\"copyright\\\">\\n<ul>\\n\\t\\t\\t\\t\\t\\t<!--\\n\\n<li>作者: <a href=\\\"https://www.laruence.com\\\">Laruence</a>(<a href=\\\"http://www.twitter.com/laruence\\\" target=\\\"meme\\\" title=\\\"Twitter\\\"><img src=\\\"/images/ico-twitter.png\\\" /></a> <a href=\\\"http://t.sina.com/laruence\\\" target=\\\"meme\\\" title=\\\"新浪微博\\\"><img src=\\\"/images/ico-sina.png\\\" /></a> <a href=\\\"http://fusion.google.com/add?feedurl=http://www.laruence.com/feed\\\" target=\\\"meme\\\" title=\\\"Google阅读器\\\"><img src=\\\"/images/ico-google.png\\\" /></a> <a href=\\\"mailto:laruence@yahoo.com.cn\\\" target=\\\"meme\\\" title=\\\"邮件\\\"><img src=\\\"/images/ico-mail.png\\\" /></a>)</li>\\n\\n --><p></p>\\n<li>本文地址: <a href=\\\"https://www.laruence.com/2020/07/13/6033.html\\\" title=\\\"Permanet Link to PHP8新特性之match表达式\\\">https://www.laruence.com/2020/07/13/6033.html</a></li>\\n\\n<li>转载请注明出处 </li>\\n</ul></div>\\n<p>PHP8 alpha2发布了，最近引入了一个新的关键字：match, 这个关键字的作用跟switch有点类似。</p>\\n<p>虽然我一般对语法糖无感，但这个我觉得还是有点意思，match这个词也挺好看，那么它是干啥的呢？</p>\\n<p>在以前我们可能会经常使用switch做值转换类的工作，类似:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_keyword\\\">switch</span> <span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$input</span><span class=\\\"sh_symbol\\\">)</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_statement\\\">case</span> <span class=\\\"sh_string\\\">\\\"true\\\"</span><span class=\\\"sh_symbol\\\">:</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_variable\\\">$result</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_number\\\">1</span>;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_statement\\\">break</span>;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_statement\\\">case</span> <span class=\\\"sh_string\\\">\\\"false\\\"</span><span class=\\\"sh_symbol\\\">:</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_variable\\\">$result</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_number\\\">0</span>;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_statement\\\">break</span>;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_statement\\\">case</span> <span class=\\\"sh_string\\\">\\\"null\\\"</span><span class=\\\"sh_symbol\\\">:</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_variable\\\">$result</span> <span class=\\\"sh_symbol\\\">=</span> NULL;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_statement\\\">break</span>;</li><li><span class=\\\"sh_symbol\\\">}</span></li></ol></pre>\\n<p>(当然，有的同学会说，谁会这么写，用个数组转换不行么？ 拜托，这是举例啊，数组也只能数字键和整数啊，万一key是需要其他表达式呢，万一你要多个key对应一个值呢，对吧？)</p>\\n<p>那么如果使用match关键字呢，可以变成类似:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_variable\\\">$result</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_function\\\">match</span><span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$input</span><span class=\\\"sh_symbol\\\">)</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_string\\\">\\\"true\\\"</span> <span class=\\\"sh_symbol\\\">=&gt;</span> <span class=\\\"sh_number\\\">1</span>,</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_string\\\">\\\"false\\\"</span> <span class=\\\"sh_symbol\\\">=&gt;</span> <span class=\\\"sh_number\\\">0</span>,</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_string\\\">\\\"null\\\"</span> <span class=\\\"sh_symbol\\\">=&gt;</span> NULL,</li><li><span class=\\\"sh_symbol\\\">}</span>;</li></ol></pre>\\n<p>相比switch， match会直接返回值，可以直接赋值给$result了。</p>\\n<p>并且，类似switch的多个case一个block一样，match的多个条件也可以写在一起，比如:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_variable\\\">$result</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_function\\\">match</span><span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$input</span><span class=\\\"sh_symbol\\\">)</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_string\\\">\\\"true\\\"</span>, <span class=\\\"sh_string\\\">\\\"on\\\"</span> <span class=\\\"sh_symbol\\\">=&gt;</span> <span class=\\\"sh_number\\\">1</span>,</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_string\\\">\\\"false\\\"</span>, <span class=\\\"sh_string\\\">\\\"off\\\"</span> <span class=\\\"sh_symbol\\\">=&gt;</span> <span class=\\\"sh_number\\\">0</span>,</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_string\\\">\\\"null\\\"</span>, <span class=\\\"sh_string\\\">\\\"empty\\\"</span>, <span class=\\\"sh_string\\\">\\\"NaN\\\"</span> <span class=\\\"sh_symbol\\\">=&gt;</span> NULL,</li><li><span class=\\\"sh_symbol\\\">}</span>;</li></ol></pre>\\n<p>需要注意的和switch不太一样的是，以前我们用switch可能会经常遇到这种诡异的问题:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_variable\\\">$input</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_string\\\">\\\"2 person\\\"</span>;</li><li><span class=\\\"sh_keyword\\\">switch</span> <span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$input</span><span class=\\\"sh_symbol\\\">)</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_statement\\\">case</span> <span class=\\\"sh_number\\\">2</span><span class=\\\"sh_symbol\\\">:</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_keyword\\\">echo</span> <span class=\\\"sh_string\\\">\\\"bad\\\"</span>;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_statement\\\">break</span>;</li><li><span class=\\\"sh_symbol\\\">}</span></li></ol></pre>\\n<p>你会发现，bad竟然被输出了，这是因为switch使用了宽松比较(==)。match就不会有这个问题了, 它使用的是严格比较(===)，就是值和类型都要完全相等。</p>\\n<p>还有就是，当input并不能被match中的所有条件满足的时候，match会抛出一个UnhandledMatchError  exception:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_variable\\\">$input</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_string\\\">\\\"false\\\"</span>;</li><li><span class=\\\"sh_variable\\\">$result</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_function\\\">match</span><span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$input</span><span class=\\\"sh_symbol\\\">)</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_string\\\">\\\"true\\\"</span> <span class=\\\"sh_symbol\\\">=&gt;</span> <span class=\\\"sh_number\\\">1</span>,</li><li><span class=\\\"sh_symbol\\\">}</span>;</li></ol></pre>\\n<p>会得到:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>Fatal error: Uncaught UnhandledMatchError: Unhandled match value of type string</li></ol></pre>\\n<p>这样就不用担心万一match条件没写全导致了不可预知的错误。</p>\\n<p>另外还是要说明，match是关键字，也就是从PHP8开始它不能出现在namespace或者类名中，如果你的项目中有用match作为类名的:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_builtin_types\\\">class</span> Match <span class=\\\"sh_symbol\\\">{}</span></li></ol></pre>\\n<p>在PHP8开始将会得到语法错误了, 当然，方法名中还是可以用的。</p>\\n<p>详细的，可以参考RFC：<a href=\\\"https://wiki.php.net/rfc/match_expression_v2\\\" target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">Match Expression</a></p>\\n<p>以上，没了。</p>\\n<p><script type=\\\"text/javascript\\\" src=\\\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_php.js\\\"></script><script type=\\\"text/javascript\\\" src=\\\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_bash.js\\\"></script></p>\\n<div class=\\\"rp4wp-related-posts\\\">\\n<h3>Related Posts</h3>\\n<ul>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2020/06/16/5916.html\\\">使用SSE2指令高效实现strtolower</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2010/07/30/1682.html\\\">注意PHP对字符串的递增运算</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2010/12/17/1833.html\\\">PHP是无辜的</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2020/06/12/5902.html\\\">PHP 8新特性之Attributes(注解)</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2011/06/26/2083.html\\\">Yaf已提交到PECL</a></div>\\n</li>\\n</ul>\\n</div>\",\"off\":\"2\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0.00\",\"float2\":\"0.00\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625312643,\"atime\":1625312643,\"expansion\":\"\"}', '192.168.1.13', 1625312643, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (233, 1, 3, '{\"yuan\":{\"id\":2,\"name\":\"PHP8新特性之match表达式\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":4,\"url\":\"2\",\"link\":\"\",\"contenttemplate\":\"\",\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"\\n<div class=\\\"copyright\\\">\\n<ul>\\n\\t\\t\\t\\t\\t\\t<!--\\n\\n<li>作者: <a href=\\\"https://www.laruence.com\\\">Laruence</a>(<a href=\\\"http://www.twitter.com/laruence\\\" target=\\\"meme\\\" title=\\\"Twitter\\\"><img src=\\\"/images/ico-twitter.png\\\" /></a> <a href=\\\"http://t.sina.com/laruence\\\" target=\\\"meme\\\" title=\\\"新浪微博\\\"><img src=\\\"/images/ico-sina.png\\\" /></a> <a href=\\\"http://fusion.google.com/add?feedurl=http://www.laruence.com/feed\\\" target=\\\"meme\\\" title=\\\"Google阅读器\\\"><img src=\\\"/images/ico-google.png\\\" /></a> <a href=\\\"mailto:laruence@yahoo.com.cn\\\" target=\\\"meme\\\" title=\\\"邮件\\\"><img src=\\\"/images/ico-mail.png\\\" /></a>)</li>\\n\\n --><p></p>\\n<li>本文地址: <a href=\\\"https://www.laruence.com/2020/07/13/6033.html\\\" title=\\\"Permanet Link to PHP8新特性之match表达式\\\">https://www.laruence.com/2020/07/13/6033.html</a></li>\\n\\n<li>转载请注明出处 </li>\\n</ul></div>\\n<p>PHP8 alpha2发布了，最近引入了一个新的关键字：match, 这个关键字的作用跟switch有点类似。</p>\\n<p>虽然我一般对语法糖无感，但这个我觉得还是有点意思，match这个词也挺好看，那么它是干啥的呢？</p>\\n<p>在以前我们可能会经常使用switch做值转换类的工作，类似:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_keyword\\\">switch</span> <span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$input</span><span class=\\\"sh_symbol\\\">)</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_statement\\\">case</span> <span class=\\\"sh_string\\\">\\\"true\\\"</span><span class=\\\"sh_symbol\\\">:</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_variable\\\">$result</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_number\\\">1</span>;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_statement\\\">break</span>;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_statement\\\">case</span> <span class=\\\"sh_string\\\">\\\"false\\\"</span><span class=\\\"sh_symbol\\\">:</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_variable\\\">$result</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_number\\\">0</span>;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_statement\\\">break</span>;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_statement\\\">case</span> <span class=\\\"sh_string\\\">\\\"null\\\"</span><span class=\\\"sh_symbol\\\">:</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_variable\\\">$result</span> <span class=\\\"sh_symbol\\\">=</span> NULL;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_statement\\\">break</span>;</li><li><span class=\\\"sh_symbol\\\">}</span></li></ol></pre>\\n<p>(当然，有的同学会说，谁会这么写，用个数组转换不行么？ 拜托，这是举例啊，数组也只能数字键和整数啊，万一key是需要其他表达式呢，万一你要多个key对应一个值呢，对吧？)</p>\\n<p>那么如果使用match关键字呢，可以变成类似:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_variable\\\">$result</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_function\\\">match</span><span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$input</span><span class=\\\"sh_symbol\\\">)</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_string\\\">\\\"true\\\"</span> <span class=\\\"sh_symbol\\\">=&gt;</span> <span class=\\\"sh_number\\\">1</span>,</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_string\\\">\\\"false\\\"</span> <span class=\\\"sh_symbol\\\">=&gt;</span> <span class=\\\"sh_number\\\">0</span>,</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_string\\\">\\\"null\\\"</span> <span class=\\\"sh_symbol\\\">=&gt;</span> NULL,</li><li><span class=\\\"sh_symbol\\\">}</span>;</li></ol></pre>\\n<p>相比switch， match会直接返回值，可以直接赋值给$result了。</p>\\n<p>并且，类似switch的多个case一个block一样，match的多个条件也可以写在一起，比如:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_variable\\\">$result</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_function\\\">match</span><span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$input</span><span class=\\\"sh_symbol\\\">)</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_string\\\">\\\"true\\\"</span>, <span class=\\\"sh_string\\\">\\\"on\\\"</span> <span class=\\\"sh_symbol\\\">=&gt;</span> <span class=\\\"sh_number\\\">1</span>,</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_string\\\">\\\"false\\\"</span>, <span class=\\\"sh_string\\\">\\\"off\\\"</span> <span class=\\\"sh_symbol\\\">=&gt;</span> <span class=\\\"sh_number\\\">0</span>,</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_string\\\">\\\"null\\\"</span>, <span class=\\\"sh_string\\\">\\\"empty\\\"</span>, <span class=\\\"sh_string\\\">\\\"NaN\\\"</span> <span class=\\\"sh_symbol\\\">=&gt;</span> NULL,</li><li><span class=\\\"sh_symbol\\\">}</span>;</li></ol></pre>\\n<p>需要注意的和switch不太一样的是，以前我们用switch可能会经常遇到这种诡异的问题:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_variable\\\">$input</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_string\\\">\\\"2 person\\\"</span>;</li><li><span class=\\\"sh_keyword\\\">switch</span> <span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$input</span><span class=\\\"sh_symbol\\\">)</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_statement\\\">case</span> <span class=\\\"sh_number\\\">2</span><span class=\\\"sh_symbol\\\">:</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_keyword\\\">echo</span> <span class=\\\"sh_string\\\">\\\"bad\\\"</span>;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_statement\\\">break</span>;</li><li><span class=\\\"sh_symbol\\\">}</span></li></ol></pre>\\n<p>你会发现，bad竟然被输出了，这是因为switch使用了宽松比较(==)。match就不会有这个问题了, 它使用的是严格比较(===)，就是值和类型都要完全相等。</p>\\n<p>还有就是，当input并不能被match中的所有条件满足的时候，match会抛出一个UnhandledMatchError  exception:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_variable\\\">$input</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_string\\\">\\\"false\\\"</span>;</li><li><span class=\\\"sh_variable\\\">$result</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_function\\\">match</span><span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$input</span><span class=\\\"sh_symbol\\\">)</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_string\\\">\\\"true\\\"</span> <span class=\\\"sh_symbol\\\">=&gt;</span> <span class=\\\"sh_number\\\">1</span>,</li><li><span class=\\\"sh_symbol\\\">}</span>;</li></ol></pre>\\n<p>会得到:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>Fatal error: Uncaught UnhandledMatchError: Unhandled match value of type string</li></ol></pre>\\n<p>这样就不用担心万一match条件没写全导致了不可预知的错误。</p>\\n<p>另外还是要说明，match是关键字，也就是从PHP8开始它不能出现在namespace或者类名中，如果你的项目中有用match作为类名的:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_builtin_types\\\">class</span> Match <span class=\\\"sh_symbol\\\">{}</span></li></ol></pre>\\n<p>在PHP8开始将会得到语法错误了, 当然，方法名中还是可以用的。</p>\\n<p>详细的，可以参考RFC：<a href=\\\"https://wiki.php.net/rfc/match_expression_v2\\\" target=\\\"_blank\\\" rel=\\\"noopener noreferrer\\\">Match Expression</a></p>\\n<p>以上，没了。</p>\\n<p><script type=\\\"text/javascript\\\" src=\\\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_php.js\\\"></script><script type=\\\"text/javascript\\\" src=\\\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_bash.js\\\"></script></p>\\n<div class=\\\"rp4wp-related-posts\\\">\\n<h3>Related Posts</h3>\\n<ul>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2020/06/16/5916.html\\\">使用SSE2指令高效实现strtolower</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2010/07/30/1682.html\\\">注意PHP对字符串的递增运算</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2010/12/17/1833.html\\\">PHP是无辜的</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2020/06/12/5902.html\\\">PHP 8新特性之Attributes(注解)</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2011/06/26/2083.html\\\">Yaf已提交到PECL</a></div>\\n</li>\\n</ul>\\n</div>\",\"expansion\":\"\",\"atime\":1625312643,\"xtime\":1625312643,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"off\":2,\"remarks\":\"\"},\"data\":{\"id\":\"2\",\"name\":\"一个关于if else容易迷惑的问题\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"4\",\"url\":\"2\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\\n\\t\\t\\t\\t\\n<div class=\\\"copyright\\\">\\n<ul>\\n\\t\\t\\t\\t\\t\\t<!--\\n\\n<li>作者: <a href=\\\"https://www.laruence.com\\\">Laruence</a>(<a href=\\\"http://www.twitter.com/laruence\\\" target=\\\"meme\\\" title=\\\"Twitter\\\"><img src=\\\"/images/ico-twitter.png\\\" /></a> <a href=\\\"http://t.sina.com/laruence\\\" target=\\\"meme\\\" title=\\\"新浪微博\\\"><img src=\\\"/images/ico-sina.png\\\" /></a> <a href=\\\"http://fusion.google.com/add?feedurl=http://www.laruence.com/feed\\\" target=\\\"meme\\\" title=\\\"Google阅读器\\\"><img src=\\\"/images/ico-google.png\\\" /></a> <a href=\\\"mailto:laruence@yahoo.com.cn\\\" target=\\\"meme\\\" title=\\\"邮件\\\"><img src=\\\"/images/ico-mail.png\\\" /></a>)</li>\\n\\n --><p></p>\\n<li>本文地址: <a href=\\\"https://www.laruence.com/2020/07/09/6015.html\\\" title=\\\"Permanet Link to 一个关于if else容易迷惑的问题\\\">https://www.laruence.com/2020/07/09/6015.html</a></li>\\n\\n<li>转载请注明出处 </li>\\n</ul></div>\\n<p>这个本来是之前在微博上有个同学说他经常用来面试别人，大概是说，对于如下代码，你觉得会输出啥:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_variable\\\">$a</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_builtin_types\\\">true</span>;</li><li><span class=\\\"sh_statement\\\">if</span> <span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$a</span><span class=\\\"sh_symbol\\\">)</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;<span class=\\\"sh_keyword\\\">echo</span> <span class=\\\"sh_string\\\">\\\"true\\\"</span>;</li><li><span class=\\\"sh_symbol\\\">}</span> <span class=\\\"sh_keyword\\\">else</span> label<span class=\\\"sh_symbol\\\">:</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;<span class=\\\"sh_keyword\\\">echo</span> <span class=\\\"sh_string\\\">\\\"false\\\"</span>;</li><li><span class=\\\"sh_symbol\\\">}</span></li></ol></pre>\\n<p>当时觉得有点偏，没想写，今天中午又有人问我，我想那就介绍下这个原因吧.</p>\\n<p>首先，上面的代码输出truefalse, 如果你知道原因，那就不用继续往下看了，如果不知道，那么:</p>\\n<p>这块让人比较迷惑的原因可能是因为，我们会很直观的认为:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li>label <span class=\\\"sh_symbol\\\">:</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;statement;</li><li><span class=\\\"sh_symbol\\\">}</span></li></ol></pre>\\n<p>应该是一个整体， 就好比类似:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_statement\\\">if</span> <span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$a</span><span class=\\\"sh_symbol\\\">)</span> <span class=\\\"sh_symbol\\\">{</span></li><li><span class=\\\"sh_symbol\\\">}</span> <span class=\\\"sh_keyword\\\">else</span> <span class=\\\"sh_keyword\\\">switch</span><span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$a</span><span class=\\\"sh_symbol\\\">)</span> <span class=\\\"sh_symbol\\\">{</span></li><li><span class=\\\"sh_symbol\\\">}</span></li></ol></pre>\\n<p>或者:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_statement\\\">if</span> <span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$a</span><span class=\\\"sh_symbol\\\">)</span> <span class=\\\"sh_symbol\\\">{</span></li><li><span class=\\\"sh_symbol\\\">}</span> <span class=\\\"sh_keyword\\\">else</span> <span class=\\\"sh_keyword\\\">do</span> <span class=\\\"sh_symbol\\\">{</span></li><li><span class=\\\"sh_symbol\\\">}</span> <span class=\\\"sh_statement\\\">while</span> <span class=\\\"sh_symbol\\\">(!</span><span class=\\\"sh_variable\\\">$a</span><span class=\\\"sh_symbol\\\">)</span>;</li></ol></pre>\\n<p>因为在PHP的语法设计中，if else本质上是:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_yacc\\\" linenum=\\\"off\\\"><ol><li>if_stmt:</li><li>&nbsp;if_stmt_without_else T_ELSE statement</li></ol></pre>\\n<p>也就是说，else后面可以接一切statement，如果条件不成立，执行流就跳到else后面的statement，而while, switch都可以归约为statement。</p>\\n<p>但label这块稍微有点特别（可以说是一个设计违反直觉的”缺陷”吧), 在zend_language_parser.y中:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_yacc\\\" linenum=\\\"off\\\"><ol><li>statement:</li><li>&nbsp;&nbsp;...</li><li>&nbsp;&nbsp;| T_DO statement T_WHILE \'(\' expr \')\' \';\' {...}</li><li>&nbsp;&nbsp;| T_SWITCH \'(\' expr \')\' switch_case_list {...}</li><li>&nbsp;&nbsp;| T_STRING ‘:’ { $$ = zend_ast_create(ZEND_AST_LABEL, $1); }</li></ol></pre>\\n<p>大家可以看到， do while, switch 都会联合他们的body归约为statement（语句），但标签（label）有点不同，”label :”本身会规约为一条statement， 这就导致了这个看起来比较迷惑的问题的出现，他本质上就变成了:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_variable\\\">$a</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_builtin_types\\\">true</span>;</li><li><span class=\\\"sh_statement\\\">if</span> <span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$a</span><span class=\\\"sh_symbol\\\">)</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;<span class=\\\"sh_keyword\\\">echo</span> <span class=\\\"sh_string\\\">\\\"true\\\"</span>;</li><li><span class=\\\"sh_symbol\\\">}</span> <span class=\\\"sh_keyword\\\">else</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;label<span class=\\\"sh_symbol\\\">:</span> ;  <span class=\\\"sh_comment\\\">//单独的一条语句</span></li><li><span class=\\\"sh_symbol\\\">}</span></li><li><span class=\\\"sh_keyword\\\">echo</span> <span class=\\\"sh_string\\\">\\\"false\\\"</span>;</li></ol></pre>\\n<p>最后多说一句，我忘了之前在那看到的，说是这个世界上本无elseif，有的只不过是else (if statement)，本质上其实就跟这个意思是一样的。 就是，else后面可以接语句（statement）。</p>\\n<p>善用这个结合switch, for, do while等，有的时候可以让我们的代码更精简。<br>\\n比如，我们要遍历处理一个数组，当数组的长度为零的时候，要做点其他事，那很多人可能会这么写:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_statement\\\">if</span> <span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_function\\\">count</span><span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$array</span><span class=\\\"sh_symbol\\\">))</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;<span class=\\\"sh_statement\\\">for</span> <span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$i</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_number\\\">0</span>; <span class=\\\"sh_variable\\\">$i</span> <span class=\\\"sh_symbol\\\">&lt;</span> <span class=\\\"sh_function\\\">count</span><span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$array</span><span class=\\\"sh_symbol\\\">)</span>; <span class=\\\"sh_variable\\\">$i</span><span class=\\\"sh_symbol\\\">++)</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;<span class=\\\"sh_symbol\\\">}</span></li><li><span class=\\\"sh_symbol\\\">}</span> <span class=\\\"sh_keyword\\\">else</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;<span class=\\\"sh_comment\\\">//数组为空的逻辑</span></li><li><span class=\\\"sh_symbol\\\">}</span></li></ol></pre>\\n<p>但你也可以写成:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_statement\\\">if</span> <span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_function\\\">count</span><span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$array</span><span class=\\\"sh_symbol\\\">)</span> <span class=\\\"sh_symbol\\\">==</span> <span class=\\\"sh_number\\\">0</span><span class=\\\"sh_symbol\\\">)</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;&nbsp;<span class=\\\"sh_comment\\\">//数组为空的逻辑</span></li><li><span class=\\\"sh_symbol\\\">}</span> <span class=\\\"sh_keyword\\\">else</span> <span class=\\\"sh_statement\\\">for</span> <span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$i</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_number\\\">0</span>; <span class=\\\"sh_variable\\\">$i</span> <span class=\\\"sh_symbol\\\">&lt;</span> <span class=\\\"sh_function\\\">count</span><span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$array</span><span class=\\\"sh_symbol\\\">)</span>; <span class=\\\"sh_variable\\\">$i</span><span class=\\\"sh_symbol\\\">++)</span> <span class=\\\"sh_symbol\\\">{</span></li><li><span class=\\\"sh_symbol\\\">}</span></li></ol></pre>\\n<p>至于这俩中写法孰好孰坏， 那就是萝卜白菜了。</p>\\n<p>最后，大家如果在实际中遇到类似让大家觉得迷惑的问题，可以留言，也许以后也可以单独成文。<script type=\\\"text/javascript\\\" src=\\\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_php.js\\\"></script><script type=\\\"text/javascript\\\" src=\\\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_yacc.js\\\"></script></p>\\n<div class=\\\"rp4wp-related-posts\\\">\\n<h3>Related Posts</h3>\\n<ul>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2010/07/30/1682.html\\\">注意PHP对字符串的递增运算</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2019/03/01/4904.html\\\">print不是函数</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2020/02/23/1990.html\\\">var_dump(1...9)输出什么?</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2020/02/15/4982.html\\\">使用内存硬盘(tmpfs)来加速你的网站</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2013/03/26/2884.html\\\">PHP浮点数的一个常见问题的解答</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2011/12/19/2399.html\\\">关于PHP浮点数你应该知道的(All \'bogus\' about the float in PHP)</a></div>\\n</li>\\n</ul>\\n</div>\",\"off\":\"2\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625312687,\"expansion\":\"\"}}', '192.168.1.13', 1625312687, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (234, 1, 4, '{\"id\":\"0\",\"name\":\"PHP 8新特性之JIT简介\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"4\",\"url\":\"3\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\\n<div class=\\\"copyright\\\">\\n<ul>\\n\\t\\t\\t\\t\\t\\t<!--\\n\\n<li>作者: <a href=\\\"https://www.laruence.com\\\">Laruence</a>(<a href=\\\"http://www.twitter.com/laruence\\\" target=\\\"meme\\\" title=\\\"Twitter\\\"><img src=\\\"/images/ico-twitter.png\\\" /></a> <a href=\\\"http://t.sina.com/laruence\\\" target=\\\"meme\\\" title=\\\"新浪微博\\\"><img src=\\\"/images/ico-sina.png\\\" /></a> <a href=\\\"http://fusion.google.com/add?feedurl=http://www.laruence.com/feed\\\" target=\\\"meme\\\" title=\\\"Google阅读器\\\"><img src=\\\"/images/ico-google.png\\\" /></a> <a href=\\\"mailto:laruence@yahoo.com.cn\\\" target=\\\"meme\\\" title=\\\"邮件\\\"><img src=\\\"/images/ico-mail.png\\\" /></a>)</li>\\n\\n --><p></p>\\n<li>本文地址: <a href=\\\"https://www.laruence.com/2020/06/27/5963.html\\\" title=\\\"Permanet Link to PHP 8新特性之JIT简介\\\">https://www.laruence.com/2020/06/27/5963.html</a></li>\\n\\n<li>转载请注明出处 </li>\\n</ul></div>\\n<p>PHP8 alpha1已经在昨天发布，相信关于JIT是大家最关心的，它到底怎么用，有什么要注意的，以及性能提升到底咋样？</p>\\n<p>首先，我们来看一张图:<br>\\n<a href=\\\"/medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57.png\\\"><img src=\\\"/medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-1024x679.png\\\" alt=\\\"\\\" width=\\\"1024\\\" height=\\\"679\\\" class=\\\"aligncenter size-large wp-image-5985\\\" srcset=\\\"/medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-1024x679.png?v=1593340345 1024w, /medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-300x199.png?v=1593340345 300w, /medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-768x509.png?v=1593340345 768w, /medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-1536x1018.png?v=1593340345 1536w, /medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57.png?v=1593340345 1810w\\\" sizes=\\\"(max-width: 1024px) 100vw, 1024px\\\"></a></p>\\n<p>左图是PHP8之前的Opcache流程示意图， 右图是PHP8中的Opcache示意图， 可以看出几个关键点:</p>\\n<ul>\\n<li>Opcache会做opcode层面的优化，比如图中的俩条opcode合并为一条</li>\\n<li>PHP8的JIT目前是在Opcache之中提供的</li>\\n<li>JIT在Opcache优化之后的基础上，结合Runtime的信息再次优化，直接生成机器码\\n</li><li>JIT不是原来Opcache优化的替代，是增强</li>\\n<li>目前PHP8只支持x86架构的CPU</li>\\n</ul>\\n<p> 事实上JIT共用了很多原来Opcache做优化的基础数据结构，比如data flow graph, call graph, SSA等，关于这部分，后续如果有时间，可以单独在写一个文章来介绍，今天就只是着重在使用层面。</p>\\n<p> 下载安装好以后，除掉原有的opcache配置以外，对于JIT我们需要添加如下配置到php.ini：</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>opcache.jit=1205</li><li>opcache.jit_buffer_size=64M</li></ol></pre>\\n<p>  opcache.jit这个配置看起来稍微有点复杂，我来解释下, 这个配置由4个独立的数字组成，从左到右分别是(<b>请注意，这个是基于目前alpha1的版本设置，一些配置可能会随着后续版本做微调</b>):</p>\\n<ul>\\n<li>是否在生成机器码点时候使用AVX指令, 需要CPU支持:\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>0: 不使用</li><li>1: 使用</li></ol></pre>\\n</li>\\n<li>寄存器分配策略：\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>0: 不使用寄存器分配</li><li>1: 局部(block)域分配</li><li>2: 全局(function)域分配</li></ol></pre>\\n</li>\\n<li>JIT触发策略:\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>0: PHP脚本载入的时候就JIT</li><li>1: 当函数第一次被执行时JIT</li><li>2: 在一次运行后，JIT调用次数最多的百分之(opcache.prof_threshold * 100)的函数</li><li>3: 当函数/方法执行超过N(N和opcache.jit_hot_func相关)次以后JIT</li><li>4: 当函数方法的注释中含有@jit的时候对它进行JIT</li><li>5: 当一个Trace执行超过N次（和opcache.jit_hot_loop, jit_hot_return等有关)以后JIT</li></ol></pre>\\n</li>\\n<li>JIT优化策略，数值越大优化力度越大:\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>0: 不JIT</li><li>1: 做opline之间的跳转部分的JIT</li><li>2: 内敛opcode handler调用</li><li>3: 基于类型推断做函数级别的JIT</li><li>4: 基于类型推断，过程调用图做函数级别JIT</li><li>5: 基于类型推断，过程调用图做脚本级别的JIT</li></ol></pre>\\n</li>\\n</ul>\\n<p>  基于此，我们可以大概得到如下几个结论：</p>\\n<ul>\\n<li>尽量使用12x5型的配置，此时应该是效果最优的</li>\\n<li>对于x， 如果是脚本级别的，推荐使用0， 如果是Web服务型的，可以根据测试结果选择3或5</li>\\n<li>@jit的形式，在有了attributes以后，可能变为&lt;&lt;jit&gt;&gt;</li>\\n</ul>\\n<p>  现在，我们来测试下启用和不启用JIT的时候，Zend/bench.php的差异，首先是不启用(php -d opcache.jit_buffer_size=0 Zend/bench.php):</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>simple             0.008</li><li>simplecall         0.004</li><li>simpleucall        0.004</li><li>simpleudcall       0.004</li><li>mandel             0.035</li><li>mandel2            0.055</li><li>ackermann(7)       0.020</li><li>ary(50000)         0.004</li><li>ary2(50000)        0.003</li><li>ary3(2000)         0.048</li><li>fibo(30)           0.084</li><li>hash1(50000)       0.013</li><li>hash2(500)         0.010</li><li>heapsort(20000)    0.027</li><li>matrix(20)         0.026</li><li>nestedloop(12)     0.023</li><li>sieve(30)          0.013</li><li>strcat(200000)     0.006</li><li>------------------------</li><li>Total              0.387</li></ol></pre>\\n<p>   根据上面的介绍，我们选择opcache.jit=1205, 因为bench.php是脚本(php -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.php)：</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>simple             0.002</li><li>simplecall         0.001</li><li>simpleucall        0.001</li><li>simpleudcall       0.001</li><li>mandel             0.010</li><li>mandel2            0.011</li><li>ackermann(7)       0.010</li><li>ary(50000)         0.003</li><li>ary2(50000)        0.002</li><li>ary3(2000)         0.018</li><li>fibo(30)           0.031</li><li>hash1(50000)       0.011</li><li>hash2(500)         0.008</li><li>heapsort(20000)    0.014</li><li>matrix(20)         0.015</li><li>nestedloop(12)     0.011</li><li>sieve(30)          0.005</li><li>strcat(200000)     0.004</li><li>------------------------</li><li>Total              0.157</li></ol></pre>\\n<p>  可见，<b>对于Zend/bench.php, 相比不开启JIT，开启了以后，耗时降低将近60%，性能提升将近2倍</b>。</p>\\n<p>  对于大家研究学习来说，可以通过opcache.jit_debug来观测JIT后生成的汇编结果，比如对于:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_keyword\\\">function</span> <span class=\\\"sh_function\\\">simple</span><span class=\\\"sh_symbol\\\">()</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;<span class=\\\"sh_variable\\\">$a</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_number\\\">0</span>;</li><li>&nbsp;&nbsp;<span class=\\\"sh_statement\\\">for</span> <span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$i</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_number\\\">0</span>; <span class=\\\"sh_variable\\\">$i</span> <span class=\\\"sh_symbol\\\">&lt;</span> <span class=\\\"sh_number\\\">1000000</span>; <span class=\\\"sh_variable\\\">$i</span><span class=\\\"sh_symbol\\\">++)</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_variable\\\">$a</span><span class=\\\"sh_symbol\\\">++</span>;</li><li><span class=\\\"sh_symbol\\\">}</span></li></ol></pre>\\n<p>   我们通过php -d opcache.jit=1205 -dopcache.jit_debug=0x01 可以看到:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>JIT$simple: ; (/tmp/1.php)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xor %rdx, %rdx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp .L2</li><li>.L1:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x1, %rdx</li><li>.L2:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(vm_interrupt)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz .L4</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0xf4240, %rdx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jl .L1</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x10(%r14), %rcx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test %rcx, %rcx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jz .L3</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x1, 0x8(%rcx)</li><li>.L3:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x30(%r14), %rax</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %rax, EG(current_execute_data)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x28(%r14), %edi</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test $0x9e0000, %edi</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$leave_function</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %r14, EG(vm_stack_top)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x30(%r14), %r14</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(exception)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov (%r14), %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$leave_throw</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x20, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp (%r15)</li><li>.L4:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x45543818, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp JIT$$interrupt_handler</li></ol></pre>\\n<p>    大家可以尝试阅读这段汇编，比如其中针对i的递增，可以看到优化力度很大，比如因为i是局部变量直接分配在寄存器中，i的范围推断不会大于1000000，所以不需要判断是否整数溢出等等。</p>\\n<p>    而如果我们采用opcache.jit=1005, 如前面的介绍，也就是不使用寄存器分配，可以得到如下结果:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>JIT$simple: ; (/tmp/1.php)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x0, 0x50(%r14)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x4, 0x58(%r14)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp .L2</li><li>.L1:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x1, 0x50(%r14)</li><li>.L2:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(vm_interrupt)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz .L4</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0xf4240, 0x50(%r14)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jl .L1</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x10(%r14), %rcx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test %rcx, %rcx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jz .L3</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x1, 0x8(%rcx)</li><li>.L3:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x30(%r14), %rax</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %rax, EG(current_execute_data)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x28(%r14), %edi</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test $0x9e0000, %edi</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$leave_function</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %r14, EG(vm_stack_top)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x30(%r14), %r14</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(exception)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov (%r14), %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$leave_throw</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x20, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp (%r15)</li><li>.L4:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x44cdb818, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp JIT$$interrupt_handler</li></ol></pre>\\n<p>    可以看到针对i的部分，现在是在内存操作，并没有使用寄存器。  </p>\\n<p>    再如果我们采用opcache.jit=1201， 我们可以得到如下结果:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>JIT$simple: ; (/tmp/1.php)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x40, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp .L2</li><li>.L1:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(exception)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$exception_handler</li><li>.L2:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(vm_interrupt)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$interrupt_handler</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(exception)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$exception_handler</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x452a0858, %r15d</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz .L1</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp ZEND_RETURN_SPEC_CONST_LABEL</li></ol></pre>\\n<p>    这就只是简单的内敛部分opcode handler的调用了。</p>\\n<p>    你也可以尝试各种opcache.jit的策略结合debug的配置，来观测结果的不同，也可以尝试各种opcache.jit_debug的配置，比如0xff，将会有更多的辅助信息输出。</p>\\n<p>    好了，JIT的使用就简单介绍到这里，关于JIT本身的实现等细节，以后有时间，我再来写吧。</p>\\n<p>    大家现在就可以去php.net下载PHP8来测试了 ：）</p>\\n<p>thanks<script type=\\\"text/javascript\\\" src=\\\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_bash.js\\\"></script><script type=\\\"text/javascript\\\" src=\\\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_php.js\\\"></script></p>\\n<div class=\\\"rp4wp-related-posts\\\">\\n<h3>Related Posts</h3>\\n<ul>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2020/06/12/5902.html\\\">PHP 8新特性之Attributes(注解)</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2020/06/16/5916.html\\\">使用SSE2指令高效实现strtolower</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2008/08/22/404.html\\\">寻找函数定义在哪个模块</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2008/11/19/625.html\\\">让人无语的139邮箱</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2015/12/04/3086.html\\\">让PHP7达到最高性能的几个Tips</a></div>\\n</li>\\n</ul>\\n</div>\",\"off\":\"2\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0.00\",\"float2\":\"0.00\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625312846,\"atime\":1625312846,\"expansion\":\"\"}', '192.168.1.13', 1625312846, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (235, 1, 3, '{\"yuan\":{\"id\":3,\"name\":\"PHP 8新特性之JIT简介\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":4,\"url\":\"3\",\"link\":\"\",\"contenttemplate\":\"\",\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"\\n<div class=\\\"copyright\\\">\\n<ul>\\n\\t\\t\\t\\t\\t\\t<!--\\n\\n<li>作者: <a href=\\\"https://www.laruence.com\\\">Laruence</a>(<a href=\\\"http://www.twitter.com/laruence\\\" target=\\\"meme\\\" title=\\\"Twitter\\\"><img src=\\\"/images/ico-twitter.png\\\" /></a> <a href=\\\"http://t.sina.com/laruence\\\" target=\\\"meme\\\" title=\\\"新浪微博\\\"><img src=\\\"/images/ico-sina.png\\\" /></a> <a href=\\\"http://fusion.google.com/add?feedurl=http://www.laruence.com/feed\\\" target=\\\"meme\\\" title=\\\"Google阅读器\\\"><img src=\\\"/images/ico-google.png\\\" /></a> <a href=\\\"mailto:laruence@yahoo.com.cn\\\" target=\\\"meme\\\" title=\\\"邮件\\\"><img src=\\\"/images/ico-mail.png\\\" /></a>)</li>\\n\\n --><p></p>\\n<li>本文地址: <a href=\\\"https://www.laruence.com/2020/06/27/5963.html\\\" title=\\\"Permanet Link to PHP 8新特性之JIT简介\\\">https://www.laruence.com/2020/06/27/5963.html</a></li>\\n\\n<li>转载请注明出处 </li>\\n</ul></div>\\n<p>PHP8 alpha1已经在昨天发布，相信关于JIT是大家最关心的，它到底怎么用，有什么要注意的，以及性能提升到底咋样？</p>\\n<p>首先，我们来看一张图:<br>\\n<a href=\\\"/medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57.png\\\"><img src=\\\"/medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-1024x679.png\\\" alt=\\\"\\\" width=\\\"1024\\\" height=\\\"679\\\" class=\\\"aligncenter size-large wp-image-5985\\\" srcset=\\\"/medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-1024x679.png?v=1593340345 1024w, /medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-300x199.png?v=1593340345 300w, /medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-768x509.png?v=1593340345 768w, /medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-1536x1018.png?v=1593340345 1536w, /medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57.png?v=1593340345 1810w\\\" sizes=\\\"(max-width: 1024px) 100vw, 1024px\\\"></a></p>\\n<p>左图是PHP8之前的Opcache流程示意图， 右图是PHP8中的Opcache示意图， 可以看出几个关键点:</p>\\n<ul>\\n<li>Opcache会做opcode层面的优化，比如图中的俩条opcode合并为一条</li>\\n<li>PHP8的JIT目前是在Opcache之中提供的</li>\\n<li>JIT在Opcache优化之后的基础上，结合Runtime的信息再次优化，直接生成机器码\\n</li><li>JIT不是原来Opcache优化的替代，是增强</li>\\n<li>目前PHP8只支持x86架构的CPU</li>\\n</ul>\\n<p> 事实上JIT共用了很多原来Opcache做优化的基础数据结构，比如data flow graph, call graph, SSA等，关于这部分，后续如果有时间，可以单独在写一个文章来介绍，今天就只是着重在使用层面。</p>\\n<p> 下载安装好以后，除掉原有的opcache配置以外，对于JIT我们需要添加如下配置到php.ini：</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>opcache.jit=1205</li><li>opcache.jit_buffer_size=64M</li></ol></pre>\\n<p>  opcache.jit这个配置看起来稍微有点复杂，我来解释下, 这个配置由4个独立的数字组成，从左到右分别是(<b>请注意，这个是基于目前alpha1的版本设置，一些配置可能会随着后续版本做微调</b>):</p>\\n<ul>\\n<li>是否在生成机器码点时候使用AVX指令, 需要CPU支持:\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>0: 不使用</li><li>1: 使用</li></ol></pre>\\n</li>\\n<li>寄存器分配策略：\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>0: 不使用寄存器分配</li><li>1: 局部(block)域分配</li><li>2: 全局(function)域分配</li></ol></pre>\\n</li>\\n<li>JIT触发策略:\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>0: PHP脚本载入的时候就JIT</li><li>1: 当函数第一次被执行时JIT</li><li>2: 在一次运行后，JIT调用次数最多的百分之(opcache.prof_threshold * 100)的函数</li><li>3: 当函数/方法执行超过N(N和opcache.jit_hot_func相关)次以后JIT</li><li>4: 当函数方法的注释中含有@jit的时候对它进行JIT</li><li>5: 当一个Trace执行超过N次（和opcache.jit_hot_loop, jit_hot_return等有关)以后JIT</li></ol></pre>\\n</li>\\n<li>JIT优化策略，数值越大优化力度越大:\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>0: 不JIT</li><li>1: 做opline之间的跳转部分的JIT</li><li>2: 内敛opcode handler调用</li><li>3: 基于类型推断做函数级别的JIT</li><li>4: 基于类型推断，过程调用图做函数级别JIT</li><li>5: 基于类型推断，过程调用图做脚本级别的JIT</li></ol></pre>\\n</li>\\n</ul>\\n<p>  基于此，我们可以大概得到如下几个结论：</p>\\n<ul>\\n<li>尽量使用12x5型的配置，此时应该是效果最优的</li>\\n<li>对于x， 如果是脚本级别的，推荐使用0， 如果是Web服务型的，可以根据测试结果选择3或5</li>\\n<li>@jit的形式，在有了attributes以后，可能变为&lt;&lt;jit&gt;&gt;</li>\\n</ul>\\n<p>  现在，我们来测试下启用和不启用JIT的时候，Zend/bench.php的差异，首先是不启用(php -d opcache.jit_buffer_size=0 Zend/bench.php):</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>simple             0.008</li><li>simplecall         0.004</li><li>simpleucall        0.004</li><li>simpleudcall       0.004</li><li>mandel             0.035</li><li>mandel2            0.055</li><li>ackermann(7)       0.020</li><li>ary(50000)         0.004</li><li>ary2(50000)        0.003</li><li>ary3(2000)         0.048</li><li>fibo(30)           0.084</li><li>hash1(50000)       0.013</li><li>hash2(500)         0.010</li><li>heapsort(20000)    0.027</li><li>matrix(20)         0.026</li><li>nestedloop(12)     0.023</li><li>sieve(30)          0.013</li><li>strcat(200000)     0.006</li><li>------------------------</li><li>Total              0.387</li></ol></pre>\\n<p>   根据上面的介绍，我们选择opcache.jit=1205, 因为bench.php是脚本(php -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.php)：</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>simple             0.002</li><li>simplecall         0.001</li><li>simpleucall        0.001</li><li>simpleudcall       0.001</li><li>mandel             0.010</li><li>mandel2            0.011</li><li>ackermann(7)       0.010</li><li>ary(50000)         0.003</li><li>ary2(50000)        0.002</li><li>ary3(2000)         0.018</li><li>fibo(30)           0.031</li><li>hash1(50000)       0.011</li><li>hash2(500)         0.008</li><li>heapsort(20000)    0.014</li><li>matrix(20)         0.015</li><li>nestedloop(12)     0.011</li><li>sieve(30)          0.005</li><li>strcat(200000)     0.004</li><li>------------------------</li><li>Total              0.157</li></ol></pre>\\n<p>  可见，<b>对于Zend/bench.php, 相比不开启JIT，开启了以后，耗时降低将近60%，性能提升将近2倍</b>。</p>\\n<p>  对于大家研究学习来说，可以通过opcache.jit_debug来观测JIT后生成的汇编结果，比如对于:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_keyword\\\">function</span> <span class=\\\"sh_function\\\">simple</span><span class=\\\"sh_symbol\\\">()</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;<span class=\\\"sh_variable\\\">$a</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_number\\\">0</span>;</li><li>&nbsp;&nbsp;<span class=\\\"sh_statement\\\">for</span> <span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$i</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_number\\\">0</span>; <span class=\\\"sh_variable\\\">$i</span> <span class=\\\"sh_symbol\\\">&lt;</span> <span class=\\\"sh_number\\\">1000000</span>; <span class=\\\"sh_variable\\\">$i</span><span class=\\\"sh_symbol\\\">++)</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_variable\\\">$a</span><span class=\\\"sh_symbol\\\">++</span>;</li><li><span class=\\\"sh_symbol\\\">}</span></li></ol></pre>\\n<p>   我们通过php -d opcache.jit=1205 -dopcache.jit_debug=0x01 可以看到:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>JIT$simple: ; (/tmp/1.php)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xor %rdx, %rdx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp .L2</li><li>.L1:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x1, %rdx</li><li>.L2:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(vm_interrupt)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz .L4</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0xf4240, %rdx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jl .L1</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x10(%r14), %rcx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test %rcx, %rcx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jz .L3</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x1, 0x8(%rcx)</li><li>.L3:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x30(%r14), %rax</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %rax, EG(current_execute_data)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x28(%r14), %edi</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test $0x9e0000, %edi</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$leave_function</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %r14, EG(vm_stack_top)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x30(%r14), %r14</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(exception)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov (%r14), %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$leave_throw</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x20, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp (%r15)</li><li>.L4:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x45543818, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp JIT$$interrupt_handler</li></ol></pre>\\n<p>    大家可以尝试阅读这段汇编，比如其中针对i的递增，可以看到优化力度很大，比如因为i是局部变量直接分配在寄存器中，i的范围推断不会大于1000000，所以不需要判断是否整数溢出等等。</p>\\n<p>    而如果我们采用opcache.jit=1005, 如前面的介绍，也就是不使用寄存器分配，可以得到如下结果:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>JIT$simple: ; (/tmp/1.php)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x0, 0x50(%r14)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x4, 0x58(%r14)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp .L2</li><li>.L1:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x1, 0x50(%r14)</li><li>.L2:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(vm_interrupt)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz .L4</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0xf4240, 0x50(%r14)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jl .L1</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x10(%r14), %rcx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test %rcx, %rcx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jz .L3</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x1, 0x8(%rcx)</li><li>.L3:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x30(%r14), %rax</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %rax, EG(current_execute_data)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x28(%r14), %edi</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test $0x9e0000, %edi</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$leave_function</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %r14, EG(vm_stack_top)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x30(%r14), %r14</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(exception)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov (%r14), %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$leave_throw</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x20, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp (%r15)</li><li>.L4:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x44cdb818, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp JIT$$interrupt_handler</li></ol></pre>\\n<p>    可以看到针对i的部分，现在是在内存操作，并没有使用寄存器。  </p>\\n<p>    再如果我们采用opcache.jit=1201， 我们可以得到如下结果:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>JIT$simple: ; (/tmp/1.php)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x40, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp .L2</li><li>.L1:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(exception)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$exception_handler</li><li>.L2:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(vm_interrupt)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$interrupt_handler</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(exception)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$exception_handler</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x452a0858, %r15d</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz .L1</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp ZEND_RETURN_SPEC_CONST_LABEL</li></ol></pre>\\n<p>    这就只是简单的内敛部分opcode handler的调用了。</p>\\n<p>    你也可以尝试各种opcache.jit的策略结合debug的配置，来观测结果的不同，也可以尝试各种opcache.jit_debug的配置，比如0xff，将会有更多的辅助信息输出。</p>\\n<p>    好了，JIT的使用就简单介绍到这里，关于JIT本身的实现等细节，以后有时间，我再来写吧。</p>\\n<p>    大家现在就可以去php.net下载PHP8来测试了 ：）</p>\\n<p>thanks<script type=\\\"text/javascript\\\" src=\\\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_bash.js\\\"></script><script type=\\\"text/javascript\\\" src=\\\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_php.js\\\"></script></p>\\n<div class=\\\"rp4wp-related-posts\\\">\\n<h3>Related Posts</h3>\\n<ul>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2020/06/12/5902.html\\\">PHP 8新特性之Attributes(注解)</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2020/06/16/5916.html\\\">使用SSE2指令高效实现strtolower</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2008/08/22/404.html\\\">寻找函数定义在哪个模块</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2008/11/19/625.html\\\">让人无语的139邮箱</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2015/12/04/3086.html\\\">让PHP7达到最高性能的几个Tips</a></div>\\n</li>\\n</ul>\\n</div>\",\"expansion\":\"\",\"atime\":1625312846,\"xtime\":1625312846,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"off\":2,\"remarks\":\"\"},\"data\":{\"id\":\"3\",\"name\":\"PHP 8新特性之JIT简介\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"4\",\"url\":\"3\",\"link\":\"\",\"photo\":\"/attachment/2021-7/jpeg/c863a38215d4be6cb7ea09e4bb969280.jpeg\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"<div class=\\\"copyright\\\">\\n<ul>\\n\\t\\t\\t\\t\\t\\t<!--\\n\\n<li>作者: <a href=\\\"https://www.laruence.com\\\">Laruence</a>(<a href=\\\"http://www.twitter.com/laruence\\\" target=\\\"meme\\\" title=\\\"Twitter\\\"><img src=\\\"/images/ico-twitter.png\\\" /></a> <a href=\\\"http://t.sina.com/laruence\\\" target=\\\"meme\\\" title=\\\"新浪微博\\\"><img src=\\\"/images/ico-sina.png\\\" /></a> <a href=\\\"http://fusion.google.com/add?feedurl=http://www.laruence.com/feed\\\" target=\\\"meme\\\" title=\\\"Google阅读器\\\"><img src=\\\"/images/ico-google.png\\\" /></a> <a href=\\\"mailto:laruence@yahoo.com.cn\\\" target=\\\"meme\\\" title=\\\"邮件\\\"><img src=\\\"/images/ico-mail.png\\\" /></a>)</li>\\n\\n --><p></p>\\n<li>本文地址: <a href=\\\"https://www.laruence.com/2020/06/27/5963.html\\\" title=\\\"Permanet Link to PHP 8新特性之JIT简介\\\">https://www.laruence.com/2020/06/27/5963.html</a></li>\\n\\n<li>转载请注明出处 </li>\\n</ul></div>\\n<p>PHP8 alpha1已经在昨天发布，相信关于JIT是大家最关心的，它到底怎么用，有什么要注意的，以及性能提升到底咋样？</p>\\n<p>首先，我们来看一张图:<br>\\n<a href=\\\"/medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57.png\\\"><img src=\\\"/medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-1024x679.png\\\" alt=\\\"\\\" width=\\\"1024\\\" height=\\\"679\\\" class=\\\"aligncenter size-large wp-image-5985\\\" srcset=\\\"/medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-1024x679.png?v=1593340345 1024w, /medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-300x199.png?v=1593340345 300w, /medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-768x509.png?v=1593340345 768w, /medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-1536x1018.png?v=1593340345 1536w, /medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57.png?v=1593340345 1810w\\\" sizes=\\\"(max-width: 1024px) 100vw, 1024px\\\"></a></p>\\n<p>左图是PHP8之前的Opcache流程示意图， 右图是PHP8中的Opcache示意图， 可以看出几个关键点:</p>\\n<ul>\\n<li>Opcache会做opcode层面的优化，比如图中的俩条opcode合并为一条</li>\\n<li>PHP8的JIT目前是在Opcache之中提供的</li>\\n<li>JIT在Opcache优化之后的基础上，结合Runtime的信息再次优化，直接生成机器码\\n</li><li>JIT不是原来Opcache优化的替代，是增强</li>\\n<li>目前PHP8只支持x86架构的CPU</li>\\n</ul>\\n<p> 事实上JIT共用了很多原来Opcache做优化的基础数据结构，比如data flow graph, call graph, SSA等，关于这部分，后续如果有时间，可以单独在写一个文章来介绍，今天就只是着重在使用层面。</p>\\n<p> 下载安装好以后，除掉原有的opcache配置以外，对于JIT我们需要添加如下配置到php.ini：</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>opcache.jit=1205</li><li>opcache.jit_buffer_size=64M</li></ol></pre>\\n<p>  opcache.jit这个配置看起来稍微有点复杂，我来解释下, 这个配置由4个独立的数字组成，从左到右分别是(<b>请注意，这个是基于目前alpha1的版本设置，一些配置可能会随着后续版本做微调</b>):</p>\\n<ul>\\n<li>是否在生成机器码点时候使用AVX指令, 需要CPU支持:\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>0: 不使用</li><li>1: 使用</li></ol></pre>\\n</li>\\n<li>寄存器分配策略：\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>0: 不使用寄存器分配</li><li>1: 局部(block)域分配</li><li>2: 全局(function)域分配</li></ol></pre>\\n</li>\\n<li>JIT触发策略:\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>0: PHP脚本载入的时候就JIT</li><li>1: 当函数第一次被执行时JIT</li><li>2: 在一次运行后，JIT调用次数最多的百分之(opcache.prof_threshold * 100)的函数</li><li>3: 当函数/方法执行超过N(N和opcache.jit_hot_func相关)次以后JIT</li><li>4: 当函数方法的注释中含有@jit的时候对它进行JIT</li><li>5: 当一个Trace执行超过N次（和opcache.jit_hot_loop, jit_hot_return等有关)以后JIT</li></ol></pre>\\n</li>\\n<li>JIT优化策略，数值越大优化力度越大:\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>0: 不JIT</li><li>1: 做opline之间的跳转部分的JIT</li><li>2: 内敛opcode handler调用</li><li>3: 基于类型推断做函数级别的JIT</li><li>4: 基于类型推断，过程调用图做函数级别JIT</li><li>5: 基于类型推断，过程调用图做脚本级别的JIT</li></ol></pre>\\n</li>\\n</ul>\\n<p>  基于此，我们可以大概得到如下几个结论：</p>\\n<ul>\\n<li>尽量使用12x5型的配置，此时应该是效果最优的</li>\\n<li>对于x， 如果是脚本级别的，推荐使用0， 如果是Web服务型的，可以根据测试结果选择3或5</li>\\n<li>@jit的形式，在有了attributes以后，可能变为&lt;<jit>&gt;</jit></li>\\n</ul>\\n<p>  现在，我们来测试下启用和不启用JIT的时候，Zend/bench.php的差异，首先是不启用(php -d opcache.jit_buffer_size=0 Zend/bench.php):</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>simple             0.008</li><li>simplecall         0.004</li><li>simpleucall        0.004</li><li>simpleudcall       0.004</li><li>mandel             0.035</li><li>mandel2            0.055</li><li>ackermann(7)       0.020</li><li>ary(50000)         0.004</li><li>ary2(50000)        0.003</li><li>ary3(2000)         0.048</li><li>fibo(30)           0.084</li><li>hash1(50000)       0.013</li><li>hash2(500)         0.010</li><li>heapsort(20000)    0.027</li><li>matrix(20)         0.026</li><li>nestedloop(12)     0.023</li><li>sieve(30)          0.013</li><li>strcat(200000)     0.006</li><li>------------------------</li><li>Total              0.387</li></ol></pre>\\n<p>   根据上面的介绍，我们选择opcache.jit=1205, 因为bench.php是脚本(php -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.php)：</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>simple             0.002</li><li>simplecall         0.001</li><li>simpleucall        0.001</li><li>simpleudcall       0.001</li><li>mandel             0.010</li><li>mandel2            0.011</li><li>ackermann(7)       0.010</li><li>ary(50000)         0.003</li><li>ary2(50000)        0.002</li><li>ary3(2000)         0.018</li><li>fibo(30)           0.031</li><li>hash1(50000)       0.011</li><li>hash2(500)         0.008</li><li>heapsort(20000)    0.014</li><li>matrix(20)         0.015</li><li>nestedloop(12)     0.011</li><li>sieve(30)          0.005</li><li>strcat(200000)     0.004</li><li>------------------------</li><li>Total              0.157</li></ol></pre>\\n<p>  可见，<b>对于Zend/bench.php, 相比不开启JIT，开启了以后，耗时降低将近60%，性能提升将近2倍</b>。</p>\\n<p>  对于大家研究学习来说，可以通过opcache.jit_debug来观测JIT后生成的汇编结果，比如对于:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_php sh_sourceCode\\\" linenum=\\\"off\\\"><ol><li><span class=\\\"sh_keyword\\\">function</span> <span class=\\\"sh_function\\\">simple</span><span class=\\\"sh_symbol\\\">()</span> <span class=\\\"sh_symbol\\\">{</span></li><li>&nbsp;&nbsp;<span class=\\\"sh_variable\\\">$a</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_number\\\">0</span>;</li><li>&nbsp;&nbsp;<span class=\\\"sh_statement\\\">for</span> <span class=\\\"sh_symbol\\\">(</span><span class=\\\"sh_variable\\\">$i</span> <span class=\\\"sh_symbol\\\">=</span> <span class=\\\"sh_number\\\">0</span>; <span class=\\\"sh_variable\\\">$i</span> <span class=\\\"sh_symbol\\\">&lt;</span> <span class=\\\"sh_number\\\">1000000</span>; <span class=\\\"sh_variable\\\">$i</span><span class=\\\"sh_symbol\\\">++)</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\\\"sh_variable\\\">$a</span><span class=\\\"sh_symbol\\\">++</span>;</li><li><span class=\\\"sh_symbol\\\">}</span></li></ol></pre>\\n<p>   我们通过php -d opcache.jit=1205 -dopcache.jit_debug=0x01 可以看到:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>JIT$simple: ; (/tmp/1.php)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xor %rdx, %rdx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp .L2</li><li>.L1:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x1, %rdx</li><li>.L2:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(vm_interrupt)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz .L4</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0xf4240, %rdx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jl .L1</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x10(%r14), %rcx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test %rcx, %rcx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jz .L3</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x1, 0x8(%rcx)</li><li>.L3:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x30(%r14), %rax</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %rax, EG(current_execute_data)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x28(%r14), %edi</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test $0x9e0000, %edi</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$leave_function</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %r14, EG(vm_stack_top)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x30(%r14), %r14</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(exception)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov (%r14), %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$leave_throw</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x20, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp (%r15)</li><li>.L4:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x45543818, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp JIT$$interrupt_handler</li></ol></pre>\\n<p>    大家可以尝试阅读这段汇编，比如其中针对i的递增，可以看到优化力度很大，比如因为i是局部变量直接分配在寄存器中，i的范围推断不会大于1000000，所以不需要判断是否整数溢出等等。</p>\\n<p>    而如果我们采用opcache.jit=1005, 如前面的介绍，也就是不使用寄存器分配，可以得到如下结果:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>JIT$simple: ; (/tmp/1.php)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x0, 0x50(%r14)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x4, 0x58(%r14)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp .L2</li><li>.L1:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x1, 0x50(%r14)</li><li>.L2:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(vm_interrupt)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz .L4</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0xf4240, 0x50(%r14)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jl .L1</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x10(%r14), %rcx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test %rcx, %rcx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jz .L3</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x1, 0x8(%rcx)</li><li>.L3:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x30(%r14), %rax</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %rax, EG(current_execute_data)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x28(%r14), %edi</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test $0x9e0000, %edi</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$leave_function</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %r14, EG(vm_stack_top)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x30(%r14), %r14</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(exception)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov (%r14), %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$leave_throw</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x20, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp (%r15)</li><li>.L4:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x44cdb818, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp JIT$$interrupt_handler</li></ol></pre>\\n<p>    可以看到针对i的部分，现在是在内存操作，并没有使用寄存器。  </p>\\n<p>    再如果我们采用opcache.jit=1201， 我们可以得到如下结果:</p>\\n<pre name=\\\"code\\\" class=\\\"sh_bash\\\" linenum=\\\"off\\\"><ol><li>JIT$simple: ; (/tmp/1.php)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x40, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp .L2</li><li>.L1:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(exception)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$exception_handler</li><li>.L2:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(vm_interrupt)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$interrupt_handler</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(exception)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$exception_handler</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x452a0858, %r15d</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz .L1</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp ZEND_RETURN_SPEC_CONST_LABEL</li></ol></pre>\\n<p>    这就只是简单的内敛部分opcode handler的调用了。</p>\\n<p>    你也可以尝试各种opcache.jit的策略结合debug的配置，来观测结果的不同，也可以尝试各种opcache.jit_debug的配置，比如0xff，将会有更多的辅助信息输出。</p>\\n<p>    好了，JIT的使用就简单介绍到这里，关于JIT本身的实现等细节，以后有时间，我再来写吧。</p>\\n<p>    大家现在就可以去php.net下载PHP8来测试了 ：）</p>\\n<p>thanks<script type=\\\"text/javascript\\\" src=\\\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_bash.js\\\"></script><script type=\\\"text/javascript\\\" src=\\\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_php.js\\\"></script></p>\\n<div class=\\\"rp4wp-related-posts\\\">\\n<h3>Related Posts</h3>\\n<ul>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2020/06/12/5902.html\\\">PHP 8新特性之Attributes(注解)</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2020/06/16/5916.html\\\">使用SSE2指令高效实现strtolower</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2008/08/22/404.html\\\">寻找函数定义在哪个模块</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2008/11/19/625.html\\\">让人无语的139邮箱</a></div>\\n</li>\\n<li><div class=\\\"rp4wp-related-post-content\\\">\\n<a href=\\\"https://www.laruence.com/2015/12/04/3086.html\\\">让PHP7达到最高性能的几个Tips</a></div>\\n</li>\\n</ul>\\n</div>\",\"off\":\"2\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625313557,\"expansion\":\"\"}}', '192.168.1.13', 1625313557, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (236, 1, 4, '{\"id\":\"0\",\"name\":\"dsagdsg\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"2\",\"url\":\"5\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"2\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0.00\",\"float2\":\"0.00\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625314488,\"atime\":1625314488,\"expansion\":\"\"}', '192.168.1.13', 1625314488, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (237, 1, 3, '{\"yuan\":{\"id\":4,\"name\":\"dsagdsg\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":2,\"url\":\"\",\"link\":\"\",\"contenttemplate\":\"\",\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"\",\"expansion\":\"\",\"atime\":1625314301,\"xtime\":1625314301,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"off\":2,\"remarks\":\"\"},\"data\":{\"id\":\"4\",\"name\":\"dsagdsg\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"2\",\"url\":\"4\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"2\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625314586,\"expansion\":\"\"}}', '192.168.1.13', 1625314586, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (238, 1, 3, '{\"yuan\":{\"id\":6,\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"list-6\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":0,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":0,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"6\",\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"list-6\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"234234\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"0\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625315043,\"expansion\":\"\"}}', '192.168.1.13', 1625315043, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (239, 1, 3, '{\"yuan\":{\"id\":6,\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"list-6\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":0,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"234234\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625315043,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"6\",\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"list-6\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"234234243645\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"0\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625315053,\"expansion\":\"\"}}', '192.168.1.13', 1625315053, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (240, 1, 3, '{\"yuan\":{\"id\":6,\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"list-6\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":0,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"234234243645\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625315053,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"6\",\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"list-6\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"0\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625315065,\"expansion\":\"\"}}', '192.168.1.13', 1625315065, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (241, 1, 3, '{\"yuan\":{\"id\":6,\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"list-6\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":0,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625315065,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"6\",\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"list-6\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"0\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625315074,\"expansion\":\"\"}}', '192.168.1.13', 1625315074, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (242, 1, 3, '{\"yuan\":{\"id\":6,\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"list-6\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":0,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625315074,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"6\",\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"list-6\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"456456\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"0\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625315104,\"expansion\":\"\"}}', '192.168.1.13', 1625315104, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (243, 1, 3, '{\"yuan\":{\"id\":5,\"name\":\"开发笔记\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"list-5\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":1,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":0,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"5\",\"name\":\"开发笔记\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"list-5\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"1\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625315225,\"expansion\":\"\"}}', '192.168.1.13', 1625315225, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (244, 1, 3, '{\"yuan\":{\"id\":5,\"name\":\"开发笔记\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"list-5\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":1,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625315225,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"5\",\"name\":\"开发笔记\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"list-5\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"14\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"1\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625315230,\"expansion\":\"\"}}', '192.168.1.13', 1625315230, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (245, 1, 3, '{\"yuan\":{\"id\":6,\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"list-6\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":0,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"456456\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625315104,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"6\",\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"list-6\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"0\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625315236,\"expansion\":\"\"}}', '192.168.1.13', 1625315236, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (246, 1, 3, '{\"yuan\":{\"id\":6,\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"list-6\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":0,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625315236,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"6\",\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"list-6\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"0\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625315769,\"expansion\":\"\"}}', '192.168.1.13', 1625315769, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (247, 1, 4, '{\"id\":\"0\",\"name\":\"水墨中国风荷花卷轴视频片头传统文化第一讲全文案培训课件PPT中国传统文化\",\"keywords\":\"中国,传统文化,文化培训,课件培训,中国传统文化,中国文化,中国风,企业文化\",\"describes\":\"是德国代购\",\"subclass\":\"3\",\"url\":\"6\",\"link\":\"\",\"photo\":\"/attachment/2021-7/png/2c12b9ecaa0008bda937cece0a085868.png\",\"image\":\"\",\"photoalbum\":\"/attachment/2021-7/png/e892da499dd8266529cf10a4ddb8e2ee.png,/attachment/2021-7/png/6d43e2583ef5053d454ab0f7dbb3a7ef.png,/attachment/2021-7/png/af38a6067fac88c5c6fb9675cbd7f014.png,/attachment/2021-7/png/e5d82c7289d2d932f003fdfe518d159f.png,/attachment/2021-7/png/26023001764cfa6ef65487911d419a52.png,/attachment/2021-7/png/8fa19c814406895d405cbaf43d023708.png,\",\"all\":\"\",\"content\":\"德特人而儿童而已&nbsp;\",\"off\":\"2\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"100\",\"float2\":\"500\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625316008,\"atime\":1625316008,\"expansion\":\"\"}', '192.168.1.13', 1625316008, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (248, 1, 3, '{\"yuan\":{\"id\":6,\"name\":\"水墨中国风荷花卷轴视频片头传统文化第一讲全文案培训课件PPT中国传统文化\",\"keywords\":\"中国,传统文化,文化培训,课件培训,中国传统文化,中国文化,中国风,企业文化\",\"describes\":\"是德国代购\",\"subclass\":3,\"url\":\"6\",\"link\":\"\",\"contenttemplate\":\"\",\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"/attachment/2021-7/png/2c12b9ecaa0008bda937cece0a085868.png\",\"photoalbum\":\"/attachment/2021-7/png/e892da499dd8266529cf10a4ddb8e2ee.png,/attachment/2021-7/png/6d43e2583ef5053d454ab0f7dbb3a7ef.png,/attachment/2021-7/png/af38a6067fac88c5c6fb9675cbd7f014.png,/attachment/2021-7/png/e5d82c7289d2d932f003fdfe518d159f.png,/attachment/2021-7/png/26023001764cfa6ef65487911d419a52.png,/attachment/2021-7/png/8fa19c814406895d405cbaf43d023708.png,\",\"content\":\"德特人而儿童而已&nbsp;\",\"expansion\":\"\",\"atime\":1625316008,\"xtime\":1625316008,\"int1\":0,\"int2\":0,\"float1\":100,\"float2\":500,\"text1\":\"\",\"off\":2,\"remarks\":\"\"},\"data\":{\"id\":\"6\",\"name\":\"水墨中国风荷花卷轴视频片头传统文化第一讲全文案培训课件PPT中国传统文化\",\"keywords\":\"中国,传统文化,文化培训,课件培训,中国传统文化,中国文化,中国风,企业文化\",\"describes\":\"是德国代购\",\"subclass\":\"3\",\"url\":\"6\",\"link\":\"\",\"photo\":\"/attachment/2021-7/png/2c12b9ecaa0008bda937cece0a085868.png\",\"image\":\"\",\"photoalbum\":\"/attachment/2021-7/png/e892da499dd8266529cf10a4ddb8e2ee.png,/attachment/2021-7/png/6d43e2583ef5053d454ab0f7dbb3a7ef.png,/attachment/2021-7/png/af38a6067fac88c5c6fb9675cbd7f014.png,/attachment/2021-7/png/e5d82c7289d2d932f003fdfe518d159f.png,/attachment/2021-7/png/26023001764cfa6ef65487911d419a52.png,/attachment/2021-7/png/8fa19c814406895d405cbaf43d023708.png,\",\"all\":\"\",\"content\":\"德特人而儿童而已&nbsp;\",\"off\":\"2\",\"contenttemplate\":\"\",\"remarks\":\"分类:网络游戏\\n描述:以前我们可能会经常使用switch做值转换类的工作，类似:以前我们可能会经常使用switch做值转换类的工作，\\n版本:2.0 \\n大小:7.9M \",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"100\",\"float2\":\"500\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625316166,\"expansion\":\"\"}}', '192.168.1.13', 1625316166, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (249, 1, 3, '{\"yuan\":{\"id\":6,\"name\":\"水墨中国风荷花卷轴视频片头传统文化第一讲全文案培训课件PPT中国传统文化\",\"keywords\":\"中国,传统文化,文化培训,课件培训,中国传统文化,中国文化,中国风,企业文化\",\"describes\":\"是德国代购\",\"subclass\":3,\"url\":\"6\",\"link\":\"\",\"contenttemplate\":\"\",\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"/attachment/2021-7/png/2c12b9ecaa0008bda937cece0a085868.png\",\"photoalbum\":\"/attachment/2021-7/png/e892da499dd8266529cf10a4ddb8e2ee.png,/attachment/2021-7/png/6d43e2583ef5053d454ab0f7dbb3a7ef.png,/attachment/2021-7/png/af38a6067fac88c5c6fb9675cbd7f014.png,/attachment/2021-7/png/e5d82c7289d2d932f003fdfe518d159f.png,/attachment/2021-7/png/26023001764cfa6ef65487911d419a52.png,/attachment/2021-7/png/8fa19c814406895d405cbaf43d023708.png,\",\"content\":\"德特人而儿童而已&nbsp;\",\"expansion\":\"\",\"atime\":1625316008,\"xtime\":1625316166,\"int1\":0,\"int2\":0,\"float1\":100,\"float2\":500,\"text1\":\"\",\"off\":2,\"remarks\":\"分类:网络游戏\\n描述:以前我们可能会经常使用switch做值转换类的工作，类似:以前我们可能会经常使用switch做值转换类的工作，\\n版本:2.0 \\n大小:7.9M \"},\"data\":{\"id\":\"6\",\"name\":\"水墨中国风荷花卷轴视频片头传统文化第一讲全文案培训课件PPT中国传统文化\",\"keywords\":\"中国,传统文化,文化培训,课件培训,中国传统文化,中国文化,中国风,企业文化\",\"describes\":\"是德国代购\",\"subclass\":\"3\",\"url\":\"6\",\"link\":\"\",\"photo\":\"/attachment/2021-7/png/2c12b9ecaa0008bda937cece0a085868.png\",\"image\":\"\",\"photoalbum\":\"/attachment/2021-7/png/e892da499dd8266529cf10a4ddb8e2ee.png,/attachment/2021-7/png/6d43e2583ef5053d454ab0f7dbb3a7ef.png,/attachment/2021-7/png/af38a6067fac88c5c6fb9675cbd7f014.png,/attachment/2021-7/png/e5d82c7289d2d932f003fdfe518d159f.png,/attachment/2021-7/png/26023001764cfa6ef65487911d419a52.png,/attachment/2021-7/png/8fa19c814406895d405cbaf43d023708.png,\",\"all\":\"\",\"content\":\"德特人而儿童而已&nbsp;\",\"off\":\"2\",\"contenttemplate\":\"\",\"remarks\":\"分类:网络游戏\\n描述:以前我们可能会经常使用switch做值转换类的工作，类似:以前我们可能会经常使用switch做值转换类的工作，\\n版本:2.0 \\n大小:7.9M \",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"100\",\"float2\":\"500\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"5\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625316219,\"expansion\":\"\"}}', '192.168.1.13', 1625316219, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (250, 1, 3, '{\"yuan\":{\"id\":6,\"name\":\"水墨中国风荷花卷轴视频片头传统文化第一讲全文案培训课件PPT中国传统文化\",\"keywords\":\"中国,传统文化,文化培训,课件培训,中国传统文化,中国文化,中国风,企业文化\",\"describes\":\"是德国代购\",\"subclass\":3,\"url\":\"6\",\"link\":\"\",\"contenttemplate\":\"\",\"uid\":0,\"adminuid\":0,\"recommend\":5,\"sortsize\":0,\"popularity\":0,\"photo\":\"/attachment/2021-7/png/2c12b9ecaa0008bda937cece0a085868.png\",\"photoalbum\":\"/attachment/2021-7/png/e892da499dd8266529cf10a4ddb8e2ee.png,/attachment/2021-7/png/6d43e2583ef5053d454ab0f7dbb3a7ef.png,/attachment/2021-7/png/af38a6067fac88c5c6fb9675cbd7f014.png,/attachment/2021-7/png/e5d82c7289d2d932f003fdfe518d159f.png,/attachment/2021-7/png/26023001764cfa6ef65487911d419a52.png,/attachment/2021-7/png/8fa19c814406895d405cbaf43d023708.png,\",\"content\":\"德特人而儿童而已&nbsp;\",\"expansion\":\"\",\"atime\":1625316008,\"xtime\":1625316219,\"int1\":0,\"int2\":0,\"float1\":100,\"float2\":500,\"text1\":\"\",\"off\":2,\"remarks\":\"分类:网络游戏\\n描述:以前我们可能会经常使用switch做值转换类的工作，类似:以前我们可能会经常使用switch做值转换类的工作，\\n版本:2.0 \\n大小:7.9M \"},\"data\":{\"id\":\"6\",\"name\":\"水墨中国风荷花卷轴视频片头传统文化第一讲全文案培训课件PPT中国传统文化\",\"keywords\":\"中国,传统文化,文化培训,课件培训,中国传统文化,中国文化,中国风,企业文化\",\"describes\":\"是德国代购\",\"subclass\":\"3\",\"url\":\"6\",\"link\":\"\",\"photo\":\"/attachment/2021-7/png/2c12b9ecaa0008bda937cece0a085868.png\",\"image\":\"\",\"photoalbum\":\"/attachment/2021-7/png/e892da499dd8266529cf10a4ddb8e2ee.png,/attachment/2021-7/png/6d43e2583ef5053d454ab0f7dbb3a7ef.png,/attachment/2021-7/png/af38a6067fac88c5c6fb9675cbd7f014.png,/attachment/2021-7/png/e5d82c7289d2d932f003fdfe518d159f.png,/attachment/2021-7/png/26023001764cfa6ef65487911d419a52.png,/attachment/2021-7/png/8fa19c814406895d405cbaf43d023708.png,\",\"all\":\"\",\"content\":\"德特人而儿童而已&nbsp;\",\"off\":\"2\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"100\",\"float2\":\"500\",\"text1\":\"分类:网络游戏\\n描述:以前我们可能会经常使用switch做值转换类的工作，类似:以前我们可能会经常使用switch做值转换类的工作，\\n版本:2.0 \\n大小:7.9M \",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"5\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625316447,\"expansion\":\"\"}}', '192.168.1.13', 1625316447, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (251, 1, 3, '{\"yuan\":{\"id\":6,\"name\":\"水墨中国风荷花卷轴视频片头传统文化第一讲全文案培训课件PPT中国传统文化\",\"keywords\":\"中国,传统文化,文化培训,课件培训,中国传统文化,中国文化,中国风,企业文化\",\"describes\":\"是德国代购\",\"subclass\":3,\"url\":\"6\",\"link\":\"\",\"contenttemplate\":\"\",\"uid\":0,\"adminuid\":0,\"recommend\":5,\"sortsize\":0,\"popularity\":0,\"photo\":\"/attachment/2021-7/png/2c12b9ecaa0008bda937cece0a085868.png\",\"photoalbum\":\"/attachment/2021-7/png/e892da499dd8266529cf10a4ddb8e2ee.png,/attachment/2021-7/png/6d43e2583ef5053d454ab0f7dbb3a7ef.png,/attachment/2021-7/png/af38a6067fac88c5c6fb9675cbd7f014.png,/attachment/2021-7/png/e5d82c7289d2d932f003fdfe518d159f.png,/attachment/2021-7/png/26023001764cfa6ef65487911d419a52.png,/attachment/2021-7/png/8fa19c814406895d405cbaf43d023708.png,\",\"content\":\"德特人而儿童而已&nbsp;\",\"expansion\":\"\",\"atime\":1625316008,\"xtime\":1625316447,\"int1\":0,\"int2\":0,\"float1\":100,\"float2\":500,\"text1\":\"分类:网络游戏\\n描述:以前我们可能会经常使用switch做值转换类的工作，类似:以前我们可能会经常使用switch做值转换类的工作，\\n版本:2.0 \\n大小:7.9M \",\"off\":2,\"remarks\":\"\"},\"data\":{\"id\":\"6\",\"name\":\"水墨中国风荷花卷轴视频片头传统文化第一讲全文案培训课件PPT中国传统文化\",\"keywords\":\"中国,传统文化,文化培训,课件培训,中国传统文化,中国文化,中国风,企业文化\",\"describes\":\"是德国代购\",\"subclass\":\"3\",\"url\":\"6\",\"link\":\"346346\",\"photo\":\"/attachment/2021-7/png/2c12b9ecaa0008bda937cece0a085868.png\",\"image\":\"\",\"photoalbum\":\"/attachment/2021-7/png/e892da499dd8266529cf10a4ddb8e2ee.png,/attachment/2021-7/png/6d43e2583ef5053d454ab0f7dbb3a7ef.png,/attachment/2021-7/png/af38a6067fac88c5c6fb9675cbd7f014.png,/attachment/2021-7/png/e5d82c7289d2d932f003fdfe518d159f.png,/attachment/2021-7/png/26023001764cfa6ef65487911d419a52.png,/attachment/2021-7/png/8fa19c814406895d405cbaf43d023708.png,\",\"all\":\"\",\"content\":\"德特人而儿童而已&nbsp;\",\"off\":\"2\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"100\",\"float2\":\"500\",\"text1\":\"分类:网络游戏\\n描述:以前我们可能会经常使用switch做值转换类的工作，类似:以前我们可能会经常使用switch做值转换类的工作，\\n版本:2.0 \\n大小:7.9M \",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"5\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625317120,\"expansion\":\"\"}}', '192.168.1.13', 1625317120, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (252, 1, 4, '{\"id\":\"0\",\"name\":\"dsagsd\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"1\",\"url\":\"7\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"sadgadsg\",\"off\":\"2\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0.00\",\"float2\":\"0.00\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625318129,\"atime\":1625318129,\"expansion\":\"\"}', '192.168.1.13', 1625318129, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (253, 1, 4, '{\"id\":\"0\",\"name\":\"dsgsdg\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"1\",\"url\":\"8\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"dsgsdgsdg\",\"off\":\"0\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0.00\",\"float2\":\"0.00\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625318137,\"atime\":1625318137,\"expansion\":\"\"}', '192.168.1.13', 1625318137, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (254, 1, 3, '{\"yuan\":{\"id\":7,\"name\":\"dsagsd\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":1,\"url\":\"7\",\"link\":\"\",\"contenttemplate\":\"\",\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"sadgadsg\",\"expansion\":\"\",\"atime\":1625318129,\"xtime\":1625318129,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"off\":2,\"remarks\":\"\"},\"data\":{\"id\":\"7\",\"name\":\"dsagsd\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"1\",\"url\":\"7\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"sadgadsg\",\"off\":\"0\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625318144,\"expansion\":\"\"}}', '192.168.1.13', 1625318144, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (255, 1, 3, '{\"yuan\":{\"id\":8,\"name\":\"dsgsdg\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":1,\"url\":\"8\",\"link\":\"\",\"contenttemplate\":\"\",\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"dsgsdgsdg\",\"expansion\":\"\",\"atime\":1625318137,\"xtime\":1625318137,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"off\":0,\"remarks\":\"\"},\"data\":{\"id\":\"8\",\"name\":\"dsgsdg\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"1\",\"url\":\"8\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"dsgsdgsdg789789789789\",\"off\":\"0\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625318153,\"expansion\":\"\"}}', '192.168.1.13', 1625318153, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (256, 1, 3, '{\"yuan\":{\"id\":7,\"name\":\"dsagsd\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":1,\"url\":\"7\",\"link\":\"\",\"contenttemplate\":\"\",\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"sadgadsg\",\"expansion\":\"\",\"atime\":1625318129,\"xtime\":1625318144,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"off\":0,\"remarks\":\"\"},\"data\":{\"id\":\"7\",\"name\":\"dsagsd78\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"1\",\"url\":\"7\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"sadgadsg679679\",\"off\":\"0\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625318158,\"expansion\":\"\"}}', '192.168.1.13', 1625318158, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (257, 1, 3, '{\"yuan\":{\"id\":2,\"pluginid\":\"cms\",\"type\":\"cms\",\"typeico\":\"layui-icon-website\",\"name\":\"cms系统\",\"describes\":\"常用cms 系统\",\"author\":\"U\",\"authorlink\":\"http://www.elikj.com\",\"version\":\"1\",\"off\":1,\"branch\":\"\",\"atime\":1590801009,\"authorizedid\":\"\",\"authorizedkey\":\"\",\"configure\":\"{\\\"列表模版\\\":{\\\"0\\\":\\\"shoplist\\\"},\\\"内容模版\\\":{\\\"0\\\":\\\"shopneirong\\\"},\\\"默认前缀\\\":{\\\"0\\\":\\\"list-\\\",\\\"1\\\":\\\"\\\"},\\\"默认风格\\\":{\\\"0\\\":\\\"blog\\\"},\\\"网站信息id\\\":{\\\"0\\\":\\\"1\\\"},\\\"缓存时间\\\":{\\\"0\\\":\\\"0\\\"}}\",\"display\":1,\"callfunction\":\"index\",\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"main\":0},\"data\":{\"off\":1,\"authorizedkey\":\"\",\"name\":\"cms系统\",\"typeico\":\"layui-icon-website\",\"type\":\"cms\",\"callfunction\":\"index\",\"authorizedid\":\"\",\"display\":1,\"main\":0,\"menuconfig\":\"{\\\"admin_type\\\":{\\\"name\\\":\\\"分类管理\\\",\\\"typeico\\\":\\\"layui-icon-tree\\\",\\\"link\\\":\\\"\\\"},\\\"admin_content\\\":{\\\"name\\\":\\\"内容管理\\\",\\\"typeico\\\":\\\"layui-icon-table\\\",\\\"link\\\":\\\"\\\"}}\",\"configure\":\"{\\\"列表模版\\\":{\\\"0\\\":\\\"shoplist\\\"},\\\"内容模版\\\":{\\\"0\\\":\\\"shopneirong\\\"},\\\"默认前缀\\\":{\\\"0\\\":\\\"list\\\",\\\"1\\\":\\\"\\\"},\\\"默认风格\\\":{\\\"0\\\":\\\"blog\\\"},\\\"网站信息id\\\":{\\\"0\\\":\\\"1\\\"},\\\"缓存时间\\\":{\\\"0\\\":\\\"0\\\"}}\"}}', '192.168.1.13', 1625318852, 'admin', 'features');
INSERT INTO `kuo_adminlog` VALUES (258, 1, 3, '{\"yuan\":{\"id\":1,\"name\":\"阔老板\",\"keywords\":\"\",\"describes\":\"Node.js JavasSript服务框架是为了简化企业级应用敏捷开发而诞生的\",\"subclass\":0,\"url\":\"list-1\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":1,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"/attachment/2021-7/png/6ea0e7e30b17a842a188b9c4fcdbc21c.png\",\"photoalbum\":\"\",\"content\":\"阔老板\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625311072,\"displayswitch\":0,\"off\":0,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"13yd 开源项目作者.\",\"Expand\":\"\"},\"data\":{\"id\":\"1\",\"name\":\"阔老板\",\"keywords\":\"\",\"describes\":\"Node.js JavasSript服务框架是为了简化企业级应用敏捷开发而诞生的\",\"subclass\":\"0\",\"url\":\"kuosfot\",\"link\":\"\",\"photo\":\"/attachment/2021-7/png/6ea0e7e30b17a842a188b9c4fcdbc21c.png\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"阔老板\",\"off\":\"0\",\"displayswitch\":\"0\",\"templatetype\":\"1\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"13yd 开源项目作者.\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625318860,\"expansion\":\"\"}}', '192.168.1.13', 1625318860, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (259, 1, 3, '{\"yuan\":{\"id\":2,\"name\":\"插件扩展\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"list-2\",\"link\":\"\",\"listtemplate\":\"shoplist\",\"contenttemplate\":\"shopneirong\",\"templatetype\":1,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":0,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"2\",\"name\":\"插件扩展\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"chajian\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"1\",\"listtemplate\":\"shoplist\",\"contenttemplate\":\"shopneirong\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625318867,\"expansion\":\"\"}}', '192.168.1.13', 1625318867, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (260, 1, 3, '{\"yuan\":{\"id\":3,\"name\":\"风格模版\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"list-3\",\"link\":\"\",\"listtemplate\":\"shoplist\",\"contenttemplate\":\"shopneirong\",\"templatetype\":1,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":0,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"3\",\"name\":\"风格模版\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"fengge\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"1\",\"listtemplate\":\"shoplist\",\"contenttemplate\":\"shopneirong\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625318871,\"expansion\":\"\"}}', '192.168.1.13', 1625318871, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (261, 1, 3, '{\"yuan\":{\"id\":4,\"name\":\"教程文档\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"list-4\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":1,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":0,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"4\",\"name\":\"教程文档\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"wendang\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"1\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625318876,\"expansion\":\"\"}}', '192.168.1.13', 1625318876, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (262, 1, 3, '{\"yuan\":{\"id\":5,\"name\":\"开发笔记\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"list-5\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":1,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"14\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625315230,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"5\",\"name\":\"开发笔记\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"biji\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"14\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"1\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625318882,\"expansion\":\"\"}}', '192.168.1.13', 1625318882, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (263, 1, 3, '{\"yuan\":{\"id\":6,\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"list-6\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":0,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625315769,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"6\",\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"zanzhu\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"0\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625318887,\"expansion\":\"\"}}', '192.168.1.13', 1625318887, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (264, 1, 3, '{\"yuan\":{\"id\":6,\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"zanzhu\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":0,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625318887,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"6\",\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"zanzhu\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"<script async=\\\"\\\" src=\\\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\\\"></script>\\n<!-- games -->\\n<ins class=\\\"adsbygoogle\\\" style=\\\"display:block;height:320px;\\\" data-ad-client=\\\"ca-pub-3062484637726226\\\" data-ad-slot=\\\"7965430714\\\" data-ad-format=\\\"auto\\\" data-full-width-responsive=\\\"true\\\"></ins>\\n<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"0\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625319280,\"expansion\":\"\"}}', '192.168.1.13', 1625319280, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (265, 1, 3, '{\"yuan\":{\"id\":6,\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"zanzhu\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":0,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"<script async=\\\"\\\" src=\\\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\\\"></script>\\n<!-- games -->\\n<ins class=\\\"adsbygoogle\\\" style=\\\"display:block;height:320px;\\\" data-ad-client=\\\"ca-pub-3062484637726226\\\" data-ad-slot=\\\"7965430714\\\" data-ad-format=\\\"auto\\\" data-full-width-responsive=\\\"true\\\"></ins>\\n<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625319280,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"6\",\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"zanzhu\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"<script async src=\\\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\\\"></script>\\n<!-- games -->\\n<ins class=\\\"adsbygoogle\\\" style=\\\"display:block;height:320px;\\\" data-ad-client=\\\"ca-pub-3062484637726226\\\" data-ad-slot=\\\"7965430714\\\" data-ad-format=\\\"auto\\\" data-full-width-responsive=\\\"true\\\"></ins>\\n<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"0\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625319326,\"expansion\":\"\"}}', '192.168.1.13', 1625319326, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (266, 1, 3, '{\"yuan\":{\"id\":6,\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"zanzhu\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":0,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"<script async src=\\\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\\\"></script>\\n<!-- games -->\\n<ins class=\\\"adsbygoogle\\\" style=\\\"display:block;height:320px;\\\" data-ad-client=\\\"ca-pub-3062484637726226\\\" data-ad-slot=\\\"7965430714\\\" data-ad-format=\\\"auto\\\" data-full-width-responsive=\\\"true\\\"></ins>\\n<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625319326,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"6\",\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"zanzhu\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"<script async=\\\"true\\\" src=\\\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\\\"></script>\\n<!-- games -->\\n<ins class=\\\"adsbygoogle\\\" style=\\\"display:block;height:320px;\\\" data-ad-client=\\\"ca-pub-3062484637726226\\\" data-ad-slot=\\\"7965430714\\\" data-ad-format=\\\"auto\\\" data-full-width-responsive=\\\"true\\\"></ins>\\n<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"0\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625319343,\"expansion\":\"\"}}', '192.168.1.13', 1625319343, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (267, 1, 3, '{\"yuan\":{\"id\":6,\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":0,\"url\":\"zanzhu\",\"link\":\"\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"templatetype\":0,\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"<script async=\\\"true\\\" src=\\\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\\\"></script>\\n<!-- games -->\\n<ins class=\\\"adsbygoogle\\\" style=\\\"display:block;height:320px;\\\" data-ad-client=\\\"ca-pub-3062484637726226\\\" data-ad-slot=\\\"7965430714\\\" data-ad-format=\\\"auto\\\" data-full-width-responsive=\\\"true\\\"></ins>\\n<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>\",\"expansion\":\"\",\"expansionform\":\"\",\"atime\":0,\"xtime\":1625319343,\"displayswitch\":1,\"off\":2,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"remarks\":\"\",\"Expand\":\"\"},\"data\":{\"id\":\"6\",\"name\":\"赞助我们\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"0\",\"url\":\"zanzhu\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"\",\"off\":\"2\",\"displayswitch\":\"1\",\"templatetype\":\"0\",\"listtemplate\":\"\",\"contenttemplate\":\"\",\"remarks\":\"\",\"expansionform\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Expand\":\"\",\"Format\":\"json\",\"apptoken\":\"f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw\",\"xtime\":1625319359,\"expansion\":\"\"}}', '192.168.1.13', 1625319359, 'cms', 'admin_type');
INSERT INTO `kuo_adminlog` VALUES (268, 1, 0, '', '192.168.1.13', 1625357133, 'admin', 'login');
INSERT INTO `kuo_adminlog` VALUES (269, 1, 3, '{\"yuan\":{\"id\":8,\"name\":\"dsgsdg\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":1,\"url\":\"8\",\"link\":\"\",\"contenttemplate\":\"\",\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"dsgsdgsdg789789789789\",\"expansion\":\"\",\"atime\":1625318137,\"xtime\":1625318153,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"off\":0,\"remarks\":\"\"},\"data\":{\"id\":\"8\",\"name\":\"45645dsgsdg\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"1\",\"url\":\"8\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"dsgsdgsdg78978978978945645\",\"off\":\"0\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"q6r2bq2k65v0893dap57uj07o29ou11la6g28k2ym5rhbu3k9x5s47r7r294m1xi\",\"xtime\":1625357148,\"expansion\":\"\"}}', '192.168.1.13', 1625357148, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (270, 1, 3, '{\"yuan\":{\"id\":7,\"name\":\"dsagsd78\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":1,\"url\":\"7\",\"link\":\"\",\"contenttemplate\":\"\",\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"sadgadsg679679\",\"expansion\":\"\",\"atime\":1625318129,\"xtime\":1625318158,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"off\":0,\"remarks\":\"\"},\"data\":{\"id\":\"7\",\"name\":\"dsagsd78\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"1\",\"url\":\"7\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"sadgadsg67967945645\",\"off\":\"0\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"q6r2bq2k65v0893dap57uj07o29ou11la6g28k2ym5rhbu3k9x5s47r7r294m1xi\",\"xtime\":1625357158,\"expansion\":\"\"}}', '192.168.1.13', 1625357158, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (271, 1, 3, '{\"yuan\":{\"id\":8,\"name\":\"45645dsgsdg\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":1,\"url\":\"8\",\"link\":\"\",\"contenttemplate\":\"\",\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"dsgsdgsdg78978978978945645\",\"expansion\":\"\",\"atime\":1625318137,\"xtime\":1625357148,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"off\":0,\"remarks\":\"\"},\"data\":{\"id\":\"8\",\"name\":\"右边菜单1\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"1\",\"url\":\"8\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"<p>右边菜单1</p>\",\"off\":\"0\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"q6r2bq2k65v0893dap57uj07o29ou11la6g28k2ym5rhbu3k9x5s47r7r294m1xi\",\"xtime\":1625359837,\"expansion\":\"\"}}', '192.168.1.13', 1625359837, 'cms', 'admin_content');
INSERT INTO `kuo_adminlog` VALUES (272, 1, 3, '{\"yuan\":{\"id\":7,\"name\":\"dsagsd78\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":1,\"url\":\"7\",\"link\":\"\",\"contenttemplate\":\"\",\"uid\":0,\"adminuid\":0,\"recommend\":0,\"sortsize\":0,\"popularity\":0,\"photo\":\"\",\"photoalbum\":\"\",\"content\":\"sadgadsg67967945645\",\"expansion\":\"\",\"atime\":1625318129,\"xtime\":1625357158,\"int1\":0,\"int2\":0,\"float1\":0,\"float2\":0,\"text1\":\"\",\"off\":0,\"remarks\":\"\"},\"data\":{\"id\":\"7\",\"name\":\"右边菜单2\",\"keywords\":\"\",\"describes\":\"\",\"subclass\":\"1\",\"url\":\"7\",\"link\":\"\",\"photo\":\"\",\"image\":\"\",\"photoalbum\":\"\",\"all\":\"\",\"content\":\"<p>右边菜单2 状态必须关闭</p>\",\"off\":\"0\",\"contenttemplate\":\"\",\"remarks\":\"\",\"int1\":\"0\",\"int2\":\"0\",\"float1\":\"0\",\"float2\":\"0\",\"text1\":\"\",\"uid\":\"0\",\"adminuid\":\"0\",\"recommend\":\"0\",\"sortsize\":\"0\",\"popularity\":\"0\",\"Format\":\"json\",\"apptoken\":\"q6r2bq2k65v0893dap57uj07o29ou11la6g28k2ym5rhbu3k9x5s47r7r294m1xi\",\"xtime\":1625359855,\"expansion\":\"\"}}', '192.168.1.13', 1625359855, 'cms', 'admin_content');
COMMIT;

-- ----------------------------
-- Table structure for kuo_cms_content
-- ----------------------------
DROP TABLE IF EXISTS `kuo_cms_content`;
CREATE TABLE `kuo_cms_content` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '分类名字',
  `keywords` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '关键词',
  `describes` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '描述',
  `subclass` bigint unsigned DEFAULT '0' COMMENT '子分类',
  `url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '内容url',
  `link` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '外联url',
  `contenttemplate` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '内容模版',
  `uid` bigint unsigned DEFAULT '0' COMMENT '用户uid',
  `adminuid` bigint unsigned DEFAULT '0' COMMENT '管理员id',
  `recommend` int unsigned DEFAULT '0' COMMENT '推荐参数',
  `sortsize` int unsigned DEFAULT '0' COMMENT '排序',
  `popularity` bigint unsigned DEFAULT '0' COMMENT '人气',
  `photo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '图片',
  `photoalbum` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '图片集',
  `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '分类内容',
  `expansion` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '扩展数据',
  `atime` int unsigned DEFAULT '0' COMMENT '录入时间',
  `xtime` int unsigned DEFAULT '0' COMMENT '修改时间',
  `int1` bigint unsigned DEFAULT '0' COMMENT '数字1',
  `int2` bigint unsigned DEFAULT '0' COMMENT '数字2',
  `float1` decimal(20,2) unsigned DEFAULT '0.00' COMMENT '金额1',
  `float2` decimal(20,2) unsigned DEFAULT '0.00' COMMENT '金额2',
  `text1` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '第二备注',
  `off` smallint unsigned DEFAULT '0' COMMENT '状态0 关闭 1 审核 2 正常',
  `remarks` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注',
  PRIMARY KEY (`id`),
  KEY `url` (`url`(250)),
  KEY `subclass` (`subclass`) USING BTREE,
  KEY `off` (`off`) USING BTREE,
  KEY `int1` (`int1`) USING BTREE,
  KEY `int2` (`int2`) USING BTREE,
  KEY `float1` (`float1`) USING BTREE,
  KEY `float2` (`float2`) USING BTREE,
  KEY `name` (`name`(250)) USING BTREE,
  KEY `keywords` (`keywords`(250)) USING BTREE,
  KEY `describes` (`describes`(250)) USING BTREE,
  KEY `subclass_off` (`subclass`,`off`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='cms内容';

-- ----------------------------
-- Records of kuo_cms_content
-- ----------------------------
BEGIN;
INSERT INTO `kuo_cms_content` VALUES (1, 'PHP8新特性之match表达式', '', '', 4, '1', '', '', 0, 0, 0, 0, 0, '', '', '\n<div class=\"copyright\">\n<ul>\n						<!--\n\n<li>作者: <a href=\"https://www.laruence.com\">Laruence</a>(<a href=\"http://www.twitter.com/laruence\" target=\"meme\" title=\"Twitter\"><img src=\"/images/ico-twitter.png\" /></a> <a href=\"http://t.sina.com/laruence\" target=\"meme\" title=\"新浪微博\"><img src=\"/images/ico-sina.png\" /></a> <a href=\"http://fusion.google.com/add?feedurl=http://www.laruence.com/feed\" target=\"meme\" title=\"Google阅读器\"><img src=\"/images/ico-google.png\" /></a> <a href=\"mailto:laruence@yahoo.com.cn\" target=\"meme\" title=\"邮件\"><img src=\"/images/ico-mail.png\" /></a>)</li>\n\n --><p></p>\n<li>本文地址: <a href=\"https://www.laruence.com/2020/07/13/6033.html\" title=\"Permanet Link to PHP8新特性之match表达式\">https://www.laruence.com/2020/07/13/6033.html</a></li>\n\n<li>转载请注明出处 </li>\n</ul></div>\n<p>PHP8 alpha2发布了，最近引入了一个新的关键字：match, 这个关键字的作用跟switch有点类似。</p>\n<p>虽然我一般对语法糖无感，但这个我觉得还是有点意思，match这个词也挺好看，那么它是干啥的呢？</p>\n<p>在以前我们可能会经常使用switch做值转换类的工作，类似:</p>\n<pre name=\"code\" class=\"sh_php sh_sourceCode\" linenum=\"off\"><ol><li><span class=\"sh_keyword\">switch</span> <span class=\"sh_symbol\">(</span><span class=\"sh_variable\">$input</span><span class=\"sh_symbol\">)</span> <span class=\"sh_symbol\">{</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_statement\">case</span> <span class=\"sh_string\">\"true\"</span><span class=\"sh_symbol\">:</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_variable\">$result</span> <span class=\"sh_symbol\">=</span> <span class=\"sh_number\">1</span>;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_statement\">break</span>;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_statement\">case</span> <span class=\"sh_string\">\"false\"</span><span class=\"sh_symbol\">:</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_variable\">$result</span> <span class=\"sh_symbol\">=</span> <span class=\"sh_number\">0</span>;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_statement\">break</span>;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_statement\">case</span> <span class=\"sh_string\">\"null\"</span><span class=\"sh_symbol\">:</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_variable\">$result</span> <span class=\"sh_symbol\">=</span> NULL;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_statement\">break</span>;</li><li><span class=\"sh_symbol\">}</span></li></ol></pre>\n<p>(当然，有的同学会说，谁会这么写，用个数组转换不行么？ 拜托，这是举例啊，数组也只能数字键和整数啊，万一key是需要其他表达式呢，万一你要多个key对应一个值呢，对吧？)</p>\n<p>那么如果使用match关键字呢，可以变成类似:</p>\n<pre name=\"code\" class=\"sh_php sh_sourceCode\" linenum=\"off\"><ol><li><span class=\"sh_variable\">$result</span> <span class=\"sh_symbol\">=</span> <span class=\"sh_function\">match</span><span class=\"sh_symbol\">(</span><span class=\"sh_variable\">$input</span><span class=\"sh_symbol\">)</span> <span class=\"sh_symbol\">{</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_string\">\"true\"</span> <span class=\"sh_symbol\">=&gt;</span> <span class=\"sh_number\">1</span>,</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_string\">\"false\"</span> <span class=\"sh_symbol\">=&gt;</span> <span class=\"sh_number\">0</span>,</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_string\">\"null\"</span> <span class=\"sh_symbol\">=&gt;</span> NULL,</li><li><span class=\"sh_symbol\">}</span>;</li></ol></pre>\n<p>相比switch， match会直接返回值，可以直接赋值给$result了。</p>\n<p>并且，类似switch的多个case一个block一样，match的多个条件也可以写在一起，比如:</p>\n<pre name=\"code\" class=\"sh_php sh_sourceCode\" linenum=\"off\"><ol><li><span class=\"sh_variable\">$result</span> <span class=\"sh_symbol\">=</span> <span class=\"sh_function\">match</span><span class=\"sh_symbol\">(</span><span class=\"sh_variable\">$input</span><span class=\"sh_symbol\">)</span> <span class=\"sh_symbol\">{</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_string\">\"true\"</span>, <span class=\"sh_string\">\"on\"</span> <span class=\"sh_symbol\">=&gt;</span> <span class=\"sh_number\">1</span>,</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_string\">\"false\"</span>, <span class=\"sh_string\">\"off\"</span> <span class=\"sh_symbol\">=&gt;</span> <span class=\"sh_number\">0</span>,</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_string\">\"null\"</span>, <span class=\"sh_string\">\"empty\"</span>, <span class=\"sh_string\">\"NaN\"</span> <span class=\"sh_symbol\">=&gt;</span> NULL,</li><li><span class=\"sh_symbol\">}</span>;</li></ol></pre>\n<p>需要注意的和switch不太一样的是，以前我们用switch可能会经常遇到这种诡异的问题:</p>\n<pre name=\"code\" class=\"sh_php sh_sourceCode\" linenum=\"off\"><ol><li><span class=\"sh_variable\">$input</span> <span class=\"sh_symbol\">=</span> <span class=\"sh_string\">\"2 person\"</span>;</li><li><span class=\"sh_keyword\">switch</span> <span class=\"sh_symbol\">(</span><span class=\"sh_variable\">$input</span><span class=\"sh_symbol\">)</span> <span class=\"sh_symbol\">{</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_statement\">case</span> <span class=\"sh_number\">2</span><span class=\"sh_symbol\">:</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_keyword\">echo</span> <span class=\"sh_string\">\"bad\"</span>;</li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_statement\">break</span>;</li><li><span class=\"sh_symbol\">}</span></li></ol></pre>\n<p>你会发现，bad竟然被输出了，这是因为switch使用了宽松比较(==)。match就不会有这个问题了, 它使用的是严格比较(===)，就是值和类型都要完全相等。</p>\n<p>还有就是，当input并不能被match中的所有条件满足的时候，match会抛出一个UnhandledMatchError  exception:</p>\n<pre name=\"code\" class=\"sh_php sh_sourceCode\" linenum=\"off\"><ol><li><span class=\"sh_variable\">$input</span> <span class=\"sh_symbol\">=</span> <span class=\"sh_string\">\"false\"</span>;</li><li><span class=\"sh_variable\">$result</span> <span class=\"sh_symbol\">=</span> <span class=\"sh_function\">match</span><span class=\"sh_symbol\">(</span><span class=\"sh_variable\">$input</span><span class=\"sh_symbol\">)</span> <span class=\"sh_symbol\">{</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_string\">\"true\"</span> <span class=\"sh_symbol\">=&gt;</span> <span class=\"sh_number\">1</span>,</li><li><span class=\"sh_symbol\">}</span>;</li></ol></pre>\n<p>会得到:</p>\n<pre name=\"code\" class=\"sh_bash\" linenum=\"off\"><ol><li>Fatal error: Uncaught UnhandledMatchError: Unhandled match value of type string</li></ol></pre>\n<p>这样就不用担心万一match条件没写全导致了不可预知的错误。</p>\n<p>另外还是要说明，match是关键字，也就是从PHP8开始它不能出现在namespace或者类名中，如果你的项目中有用match作为类名的:</p>\n<pre name=\"code\" class=\"sh_php sh_sourceCode\" linenum=\"off\"><ol><li><span class=\"sh_builtin_types\">class</span> Match <span class=\"sh_symbol\">{}</span></li></ol></pre>\n<p>在PHP8开始将会得到语法错误了, 当然，方法名中还是可以用的。</p>\n<p>详细的，可以参考RFC：<a href=\"https://wiki.php.net/rfc/match_expression_v2\" target=\"_blank\" rel=\"noopener noreferrer\">Match Expression</a></p>\n<p>以上，没了。</p>\n<p><script type=\"text/javascript\" src=\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_php.js\"></script><script type=\"text/javascript\" src=\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_bash.js\"></script></p>\n<div class=\"rp4wp-related-posts\">\n<h3>Related Posts</h3>\n<ul>\n<li><div class=\"rp4wp-related-post-content\">\n<a href=\"https://www.laruence.com/2020/06/16/5916.html\">使用SSE2指令高效实现strtolower</a></div>\n</li>\n<li><div class=\"rp4wp-related-post-content\">\n<a href=\"https://www.laruence.com/2010/07/30/1682.html\">注意PHP对字符串的递增运算</a></div>\n</li>\n<li><div class=\"rp4wp-related-post-content\">\n<a href=\"https://www.laruence.com/2010/12/17/1833.html\">PHP是无辜的</a></div>\n</li>\n<li><div class=\"rp4wp-related-post-content\">\n<a href=\"https://www.laruence.com/2020/06/12/5902.html\">PHP 8新特性之Attributes(注解)</a></div>\n</li>\n<li><div class=\"rp4wp-related-post-content\">\n<a href=\"https://www.laruence.com/2011/06/26/2083.html\">Yaf已提交到PECL</a></div>\n</li>\n</ul>\n</div>', '', 1625312566, 1625312566, 0, 0, 0.00, 0.00, '', 2, '');
INSERT INTO `kuo_cms_content` VALUES (2, '一个关于if else容易迷惑的问题', '', '', 4, '2', '', '', 0, 0, 0, 0, 0, '', '', '\n				\n<div class=\"copyright\">\n<ul>\n						<!--\n\n<li>作者: <a href=\"https://www.laruence.com\">Laruence</a>(<a href=\"http://www.twitter.com/laruence\" target=\"meme\" title=\"Twitter\"><img src=\"/images/ico-twitter.png\" /></a> <a href=\"http://t.sina.com/laruence\" target=\"meme\" title=\"新浪微博\"><img src=\"/images/ico-sina.png\" /></a> <a href=\"http://fusion.google.com/add?feedurl=http://www.laruence.com/feed\" target=\"meme\" title=\"Google阅读器\"><img src=\"/images/ico-google.png\" /></a> <a href=\"mailto:laruence@yahoo.com.cn\" target=\"meme\" title=\"邮件\"><img src=\"/images/ico-mail.png\" /></a>)</li>\n\n --><p></p>\n<li>本文地址: <a href=\"https://www.laruence.com/2020/07/09/6015.html\" title=\"Permanet Link to 一个关于if else容易迷惑的问题\">https://www.laruence.com/2020/07/09/6015.html</a></li>\n\n<li>转载请注明出处 </li>\n</ul></div>\n<p>这个本来是之前在微博上有个同学说他经常用来面试别人，大概是说，对于如下代码，你觉得会输出啥:</p>\n<pre name=\"code\" class=\"sh_php sh_sourceCode\" linenum=\"off\"><ol><li><span class=\"sh_variable\">$a</span> <span class=\"sh_symbol\">=</span> <span class=\"sh_builtin_types\">true</span>;</li><li><span class=\"sh_statement\">if</span> <span class=\"sh_symbol\">(</span><span class=\"sh_variable\">$a</span><span class=\"sh_symbol\">)</span> <span class=\"sh_symbol\">{</span></li><li>&nbsp;&nbsp;<span class=\"sh_keyword\">echo</span> <span class=\"sh_string\">\"true\"</span>;</li><li><span class=\"sh_symbol\">}</span> <span class=\"sh_keyword\">else</span> label<span class=\"sh_symbol\">:</span> <span class=\"sh_symbol\">{</span></li><li>&nbsp;&nbsp;<span class=\"sh_keyword\">echo</span> <span class=\"sh_string\">\"false\"</span>;</li><li><span class=\"sh_symbol\">}</span></li></ol></pre>\n<p>当时觉得有点偏，没想写，今天中午又有人问我，我想那就介绍下这个原因吧.</p>\n<p>首先，上面的代码输出truefalse, 如果你知道原因，那就不用继续往下看了，如果不知道，那么:</p>\n<p>这块让人比较迷惑的原因可能是因为，我们会很直观的认为:</p>\n<pre name=\"code\" class=\"sh_php sh_sourceCode\" linenum=\"off\"><ol><li>label <span class=\"sh_symbol\">:</span> <span class=\"sh_symbol\">{</span></li><li>&nbsp;&nbsp;statement;</li><li><span class=\"sh_symbol\">}</span></li></ol></pre>\n<p>应该是一个整体， 就好比类似:</p>\n<pre name=\"code\" class=\"sh_php sh_sourceCode\" linenum=\"off\"><ol><li><span class=\"sh_statement\">if</span> <span class=\"sh_symbol\">(</span><span class=\"sh_variable\">$a</span><span class=\"sh_symbol\">)</span> <span class=\"sh_symbol\">{</span></li><li><span class=\"sh_symbol\">}</span> <span class=\"sh_keyword\">else</span> <span class=\"sh_keyword\">switch</span><span class=\"sh_symbol\">(</span><span class=\"sh_variable\">$a</span><span class=\"sh_symbol\">)</span> <span class=\"sh_symbol\">{</span></li><li><span class=\"sh_symbol\">}</span></li></ol></pre>\n<p>或者:</p>\n<pre name=\"code\" class=\"sh_php sh_sourceCode\" linenum=\"off\"><ol><li><span class=\"sh_statement\">if</span> <span class=\"sh_symbol\">(</span><span class=\"sh_variable\">$a</span><span class=\"sh_symbol\">)</span> <span class=\"sh_symbol\">{</span></li><li><span class=\"sh_symbol\">}</span> <span class=\"sh_keyword\">else</span> <span class=\"sh_keyword\">do</span> <span class=\"sh_symbol\">{</span></li><li><span class=\"sh_symbol\">}</span> <span class=\"sh_statement\">while</span> <span class=\"sh_symbol\">(!</span><span class=\"sh_variable\">$a</span><span class=\"sh_symbol\">)</span>;</li></ol></pre>\n<p>因为在PHP的语法设计中，if else本质上是:</p>\n<pre name=\"code\" class=\"sh_yacc\" linenum=\"off\"><ol><li>if_stmt:</li><li>&nbsp;if_stmt_without_else T_ELSE statement</li></ol></pre>\n<p>也就是说，else后面可以接一切statement，如果条件不成立，执行流就跳到else后面的statement，而while, switch都可以归约为statement。</p>\n<p>但label这块稍微有点特别（可以说是一个设计违反直觉的”缺陷”吧), 在zend_language_parser.y中:</p>\n<pre name=\"code\" class=\"sh_yacc\" linenum=\"off\"><ol><li>statement:</li><li>&nbsp;&nbsp;...</li><li>&nbsp;&nbsp;| T_DO statement T_WHILE \'(\' expr \')\' \';\' {...}</li><li>&nbsp;&nbsp;| T_SWITCH \'(\' expr \')\' switch_case_list {...}</li><li>&nbsp;&nbsp;| T_STRING ‘:’ { $$ = zend_ast_create(ZEND_AST_LABEL, $1); }</li></ol></pre>\n<p>大家可以看到， do while, switch 都会联合他们的body归约为statement（语句），但标签（label）有点不同，”label :”本身会规约为一条statement， 这就导致了这个看起来比较迷惑的问题的出现，他本质上就变成了:</p>\n<pre name=\"code\" class=\"sh_php sh_sourceCode\" linenum=\"off\"><ol><li><span class=\"sh_variable\">$a</span> <span class=\"sh_symbol\">=</span> <span class=\"sh_builtin_types\">true</span>;</li><li><span class=\"sh_statement\">if</span> <span class=\"sh_symbol\">(</span><span class=\"sh_variable\">$a</span><span class=\"sh_symbol\">)</span> <span class=\"sh_symbol\">{</span></li><li>&nbsp;<span class=\"sh_keyword\">echo</span> <span class=\"sh_string\">\"true\"</span>;</li><li><span class=\"sh_symbol\">}</span> <span class=\"sh_keyword\">else</span> <span class=\"sh_symbol\">{</span></li><li>&nbsp;label<span class=\"sh_symbol\">:</span> ;  <span class=\"sh_comment\">//单独的一条语句</span></li><li><span class=\"sh_symbol\">}</span></li><li><span class=\"sh_keyword\">echo</span> <span class=\"sh_string\">\"false\"</span>;</li></ol></pre>\n<p>最后多说一句，我忘了之前在那看到的，说是这个世界上本无elseif，有的只不过是else (if statement)，本质上其实就跟这个意思是一样的。 就是，else后面可以接语句（statement）。</p>\n<p>善用这个结合switch, for, do while等，有的时候可以让我们的代码更精简。<br>\n比如，我们要遍历处理一个数组，当数组的长度为零的时候，要做点其他事，那很多人可能会这么写:</p>\n<pre name=\"code\" class=\"sh_php sh_sourceCode\" linenum=\"off\"><ol><li><span class=\"sh_statement\">if</span> <span class=\"sh_symbol\">(</span><span class=\"sh_function\">count</span><span class=\"sh_symbol\">(</span><span class=\"sh_variable\">$array</span><span class=\"sh_symbol\">))</span> <span class=\"sh_symbol\">{</span></li><li>&nbsp;&nbsp;<span class=\"sh_statement\">for</span> <span class=\"sh_symbol\">(</span><span class=\"sh_variable\">$i</span> <span class=\"sh_symbol\">=</span> <span class=\"sh_number\">0</span>; <span class=\"sh_variable\">$i</span> <span class=\"sh_symbol\">&lt;</span> <span class=\"sh_function\">count</span><span class=\"sh_symbol\">(</span><span class=\"sh_variable\">$array</span><span class=\"sh_symbol\">)</span>; <span class=\"sh_variable\">$i</span><span class=\"sh_symbol\">++)</span> <span class=\"sh_symbol\">{</span></li><li>&nbsp;&nbsp;<span class=\"sh_symbol\">}</span></li><li><span class=\"sh_symbol\">}</span> <span class=\"sh_keyword\">else</span> <span class=\"sh_symbol\">{</span></li><li>&nbsp;&nbsp;<span class=\"sh_comment\">//数组为空的逻辑</span></li><li><span class=\"sh_symbol\">}</span></li></ol></pre>\n<p>但你也可以写成:</p>\n<pre name=\"code\" class=\"sh_php sh_sourceCode\" linenum=\"off\"><ol><li><span class=\"sh_statement\">if</span> <span class=\"sh_symbol\">(</span><span class=\"sh_function\">count</span><span class=\"sh_symbol\">(</span><span class=\"sh_variable\">$array</span><span class=\"sh_symbol\">)</span> <span class=\"sh_symbol\">==</span> <span class=\"sh_number\">0</span><span class=\"sh_symbol\">)</span> <span class=\"sh_symbol\">{</span></li><li>&nbsp;&nbsp;&nbsp;<span class=\"sh_comment\">//数组为空的逻辑</span></li><li><span class=\"sh_symbol\">}</span> <span class=\"sh_keyword\">else</span> <span class=\"sh_statement\">for</span> <span class=\"sh_symbol\">(</span><span class=\"sh_variable\">$i</span> <span class=\"sh_symbol\">=</span> <span class=\"sh_number\">0</span>; <span class=\"sh_variable\">$i</span> <span class=\"sh_symbol\">&lt;</span> <span class=\"sh_function\">count</span><span class=\"sh_symbol\">(</span><span class=\"sh_variable\">$array</span><span class=\"sh_symbol\">)</span>; <span class=\"sh_variable\">$i</span><span class=\"sh_symbol\">++)</span> <span class=\"sh_symbol\">{</span></li><li><span class=\"sh_symbol\">}</span></li></ol></pre>\n<p>至于这俩中写法孰好孰坏， 那就是萝卜白菜了。</p>\n<p>最后，大家如果在实际中遇到类似让大家觉得迷惑的问题，可以留言，也许以后也可以单独成文。<script type=\"text/javascript\" src=\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_php.js\"></script><script type=\"text/javascript\" src=\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_yacc.js\"></script></p>\n<div class=\"rp4wp-related-posts\">\n<h3>Related Posts</h3>\n<ul>\n<li><div class=\"rp4wp-related-post-content\">\n<a href=\"https://www.laruence.com/2010/07/30/1682.html\">注意PHP对字符串的递增运算</a></div>\n</li>\n<li><div class=\"rp4wp-related-post-content\">\n<a href=\"https://www.laruence.com/2019/03/01/4904.html\">print不是函数</a></div>\n</li>\n<li><div class=\"rp4wp-related-post-content\">\n<a href=\"https://www.laruence.com/2020/02/23/1990.html\">var_dump(1...9)输出什么?</a></div>\n</li>\n<li><div class=\"rp4wp-related-post-content\">\n<a href=\"https://www.laruence.com/2020/02/15/4982.html\">使用内存硬盘(tmpfs)来加速你的网站</a></div>\n</li>\n<li><div class=\"rp4wp-related-post-content\">\n<a href=\"https://www.laruence.com/2013/03/26/2884.html\">PHP浮点数的一个常见问题的解答</a></div>\n</li>\n<li><div class=\"rp4wp-related-post-content\">\n<a href=\"https://www.laruence.com/2011/12/19/2399.html\">关于PHP浮点数你应该知道的(All \'bogus\' about the float in PHP)</a></div>\n</li>\n</ul>\n</div>', '', 1625312643, 1625312687, 0, 0, 0.00, 0.00, '', 2, '');
INSERT INTO `kuo_cms_content` VALUES (3, 'PHP 8新特性之JIT简介', '', '', 4, '3', '', '', 0, 0, 0, 0, 0, '/attachment/2021-7/jpeg/c863a38215d4be6cb7ea09e4bb969280.jpeg', '', '<div class=\"copyright\">\n<ul>\n						<!--\n\n<li>作者: <a href=\"https://www.laruence.com\">Laruence</a>(<a href=\"http://www.twitter.com/laruence\" target=\"meme\" title=\"Twitter\"><img src=\"/images/ico-twitter.png\" /></a> <a href=\"http://t.sina.com/laruence\" target=\"meme\" title=\"新浪微博\"><img src=\"/images/ico-sina.png\" /></a> <a href=\"http://fusion.google.com/add?feedurl=http://www.laruence.com/feed\" target=\"meme\" title=\"Google阅读器\"><img src=\"/images/ico-google.png\" /></a> <a href=\"mailto:laruence@yahoo.com.cn\" target=\"meme\" title=\"邮件\"><img src=\"/images/ico-mail.png\" /></a>)</li>\n\n --><p></p>\n<li>本文地址: <a href=\"https://www.laruence.com/2020/06/27/5963.html\" title=\"Permanet Link to PHP 8新特性之JIT简介\">https://www.laruence.com/2020/06/27/5963.html</a></li>\n\n<li>转载请注明出处 </li>\n</ul></div>\n<p>PHP8 alpha1已经在昨天发布，相信关于JIT是大家最关心的，它到底怎么用，有什么要注意的，以及性能提升到底咋样？</p>\n<p>首先，我们来看一张图:<br>\n<a href=\"/medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57.png\"><img src=\"/medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-1024x679.png\" alt=\"\" width=\"1024\" height=\"679\" class=\"aligncenter size-large wp-image-5985\" srcset=\"/medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-1024x679.png?v=1593340345 1024w, /medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-300x199.png?v=1593340345 300w, /medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-768x509.png?v=1593340345 768w, /medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57-1536x1018.png?v=1593340345 1536w, /medias/2020/06/Screen-Shot-2020-06-28-at-18.31.57.png?v=1593340345 1810w\" sizes=\"(max-width: 1024px) 100vw, 1024px\"></a></p>\n<p>左图是PHP8之前的Opcache流程示意图， 右图是PHP8中的Opcache示意图， 可以看出几个关键点:</p>\n<ul>\n<li>Opcache会做opcode层面的优化，比如图中的俩条opcode合并为一条</li>\n<li>PHP8的JIT目前是在Opcache之中提供的</li>\n<li>JIT在Opcache优化之后的基础上，结合Runtime的信息再次优化，直接生成机器码\n</li><li>JIT不是原来Opcache优化的替代，是增强</li>\n<li>目前PHP8只支持x86架构的CPU</li>\n</ul>\n<p> 事实上JIT共用了很多原来Opcache做优化的基础数据结构，比如data flow graph, call graph, SSA等，关于这部分，后续如果有时间，可以单独在写一个文章来介绍，今天就只是着重在使用层面。</p>\n<p> 下载安装好以后，除掉原有的opcache配置以外，对于JIT我们需要添加如下配置到php.ini：</p>\n<pre name=\"code\" class=\"sh_bash\" linenum=\"off\"><ol><li>opcache.jit=1205</li><li>opcache.jit_buffer_size=64M</li></ol></pre>\n<p>  opcache.jit这个配置看起来稍微有点复杂，我来解释下, 这个配置由4个独立的数字组成，从左到右分别是(<b>请注意，这个是基于目前alpha1的版本设置，一些配置可能会随着后续版本做微调</b>):</p>\n<ul>\n<li>是否在生成机器码点时候使用AVX指令, 需要CPU支持:\n<pre name=\"code\" class=\"sh_bash\" linenum=\"off\"><ol><li>0: 不使用</li><li>1: 使用</li></ol></pre>\n</li>\n<li>寄存器分配策略：\n<pre name=\"code\" class=\"sh_bash\" linenum=\"off\"><ol><li>0: 不使用寄存器分配</li><li>1: 局部(block)域分配</li><li>2: 全局(function)域分配</li></ol></pre>\n</li>\n<li>JIT触发策略:\n<pre name=\"code\" class=\"sh_bash\" linenum=\"off\"><ol><li>0: PHP脚本载入的时候就JIT</li><li>1: 当函数第一次被执行时JIT</li><li>2: 在一次运行后，JIT调用次数最多的百分之(opcache.prof_threshold * 100)的函数</li><li>3: 当函数/方法执行超过N(N和opcache.jit_hot_func相关)次以后JIT</li><li>4: 当函数方法的注释中含有@jit的时候对它进行JIT</li><li>5: 当一个Trace执行超过N次（和opcache.jit_hot_loop, jit_hot_return等有关)以后JIT</li></ol></pre>\n</li>\n<li>JIT优化策略，数值越大优化力度越大:\n<pre name=\"code\" class=\"sh_bash\" linenum=\"off\"><ol><li>0: 不JIT</li><li>1: 做opline之间的跳转部分的JIT</li><li>2: 内敛opcode handler调用</li><li>3: 基于类型推断做函数级别的JIT</li><li>4: 基于类型推断，过程调用图做函数级别JIT</li><li>5: 基于类型推断，过程调用图做脚本级别的JIT</li></ol></pre>\n</li>\n</ul>\n<p>  基于此，我们可以大概得到如下几个结论：</p>\n<ul>\n<li>尽量使用12x5型的配置，此时应该是效果最优的</li>\n<li>对于x， 如果是脚本级别的，推荐使用0， 如果是Web服务型的，可以根据测试结果选择3或5</li>\n<li>@jit的形式，在有了attributes以后，可能变为&lt;<jit>&gt;</jit></li>\n</ul>\n<p>  现在，我们来测试下启用和不启用JIT的时候，Zend/bench.php的差异，首先是不启用(php -d opcache.jit_buffer_size=0 Zend/bench.php):</p>\n<pre name=\"code\" class=\"sh_bash\" linenum=\"off\"><ol><li>simple             0.008</li><li>simplecall         0.004</li><li>simpleucall        0.004</li><li>simpleudcall       0.004</li><li>mandel             0.035</li><li>mandel2            0.055</li><li>ackermann(7)       0.020</li><li>ary(50000)         0.004</li><li>ary2(50000)        0.003</li><li>ary3(2000)         0.048</li><li>fibo(30)           0.084</li><li>hash1(50000)       0.013</li><li>hash2(500)         0.010</li><li>heapsort(20000)    0.027</li><li>matrix(20)         0.026</li><li>nestedloop(12)     0.023</li><li>sieve(30)          0.013</li><li>strcat(200000)     0.006</li><li>------------------------</li><li>Total              0.387</li></ol></pre>\n<p>   根据上面的介绍，我们选择opcache.jit=1205, 因为bench.php是脚本(php -d opcache.jit_buffer_size=64M -d opcache.jit=1205 Zend/bench.php)：</p>\n<pre name=\"code\" class=\"sh_bash\" linenum=\"off\"><ol><li>simple             0.002</li><li>simplecall         0.001</li><li>simpleucall        0.001</li><li>simpleudcall       0.001</li><li>mandel             0.010</li><li>mandel2            0.011</li><li>ackermann(7)       0.010</li><li>ary(50000)         0.003</li><li>ary2(50000)        0.002</li><li>ary3(2000)         0.018</li><li>fibo(30)           0.031</li><li>hash1(50000)       0.011</li><li>hash2(500)         0.008</li><li>heapsort(20000)    0.014</li><li>matrix(20)         0.015</li><li>nestedloop(12)     0.011</li><li>sieve(30)          0.005</li><li>strcat(200000)     0.004</li><li>------------------------</li><li>Total              0.157</li></ol></pre>\n<p>  可见，<b>对于Zend/bench.php, 相比不开启JIT，开启了以后，耗时降低将近60%，性能提升将近2倍</b>。</p>\n<p>  对于大家研究学习来说，可以通过opcache.jit_debug来观测JIT后生成的汇编结果，比如对于:</p>\n<pre name=\"code\" class=\"sh_php sh_sourceCode\" linenum=\"off\"><ol><li><span class=\"sh_keyword\">function</span> <span class=\"sh_function\">simple</span><span class=\"sh_symbol\">()</span> <span class=\"sh_symbol\">{</span></li><li>&nbsp;&nbsp;<span class=\"sh_variable\">$a</span> <span class=\"sh_symbol\">=</span> <span class=\"sh_number\">0</span>;</li><li>&nbsp;&nbsp;<span class=\"sh_statement\">for</span> <span class=\"sh_symbol\">(</span><span class=\"sh_variable\">$i</span> <span class=\"sh_symbol\">=</span> <span class=\"sh_number\">0</span>; <span class=\"sh_variable\">$i</span> <span class=\"sh_symbol\">&lt;</span> <span class=\"sh_number\">1000000</span>; <span class=\"sh_variable\">$i</span><span class=\"sh_symbol\">++)</span></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"sh_variable\">$a</span><span class=\"sh_symbol\">++</span>;</li><li><span class=\"sh_symbol\">}</span></li></ol></pre>\n<p>   我们通过php -d opcache.jit=1205 -dopcache.jit_debug=0x01 可以看到:</p>\n<pre name=\"code\" class=\"sh_bash\" linenum=\"off\"><ol><li>JIT$simple: ; (/tmp/1.php)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xor %rdx, %rdx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp .L2</li><li>.L1:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x1, %rdx</li><li>.L2:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(vm_interrupt)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz .L4</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0xf4240, %rdx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jl .L1</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x10(%r14), %rcx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test %rcx, %rcx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jz .L3</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x1, 0x8(%rcx)</li><li>.L3:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x30(%r14), %rax</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %rax, EG(current_execute_data)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x28(%r14), %edi</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test $0x9e0000, %edi</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$leave_function</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %r14, EG(vm_stack_top)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x30(%r14), %r14</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(exception)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov (%r14), %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$leave_throw</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x20, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp (%r15)</li><li>.L4:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x45543818, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp JIT$$interrupt_handler</li></ol></pre>\n<p>    大家可以尝试阅读这段汇编，比如其中针对i的递增，可以看到优化力度很大，比如因为i是局部变量直接分配在寄存器中，i的范围推断不会大于1000000，所以不需要判断是否整数溢出等等。</p>\n<p>    而如果我们采用opcache.jit=1005, 如前面的介绍，也就是不使用寄存器分配，可以得到如下结果:</p>\n<pre name=\"code\" class=\"sh_bash\" linenum=\"off\"><ol><li>JIT$simple: ; (/tmp/1.php)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x0, 0x50(%r14)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x4, 0x58(%r14)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp .L2</li><li>.L1:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x1, 0x50(%r14)</li><li>.L2:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(vm_interrupt)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz .L4</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0xf4240, 0x50(%r14)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jl .L1</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x10(%r14), %rcx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test %rcx, %rcx</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jz .L3</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x1, 0x8(%rcx)</li><li>.L3:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x30(%r14), %rax</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %rax, EG(current_execute_data)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x28(%r14), %edi</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test $0x9e0000, %edi</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$leave_function</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov %r14, EG(vm_stack_top)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov 0x30(%r14), %r14</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(exception)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov (%r14), %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$leave_throw</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x20, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp (%r15)</li><li>.L4:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov $0x44cdb818, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp JIT$$interrupt_handler</li></ol></pre>\n<p>    可以看到针对i的部分，现在是在内存操作，并没有使用寄存器。  </p>\n<p>    再如果我们采用opcache.jit=1201， 我们可以得到如下结果:</p>\n<pre name=\"code\" class=\"sh_bash\" linenum=\"off\"><ol><li>JIT$simple: ; (/tmp/1.php)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x40, %r15</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp .L2</li><li>.L1:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(exception)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$exception_handler</li><li>.L2:</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(vm_interrupt)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$interrupt_handler</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;call ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x0, EG(exception)</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz JIT$$exception_handler</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp $0x452a0858, %r15d</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz .L1</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add $0x10, %rsp</li><li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jmp ZEND_RETURN_SPEC_CONST_LABEL</li></ol></pre>\n<p>    这就只是简单的内敛部分opcode handler的调用了。</p>\n<p>    你也可以尝试各种opcache.jit的策略结合debug的配置，来观测结果的不同，也可以尝试各种opcache.jit_debug的配置，比如0xff，将会有更多的辅助信息输出。</p>\n<p>    好了，JIT的使用就简单介绍到这里，关于JIT本身的实现等细节，以后有时间，我再来写吧。</p>\n<p>    大家现在就可以去php.net下载PHP8来测试了 ：）</p>\n<p>thanks<script type=\"text/javascript\" src=\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_bash.js\"></script><script type=\"text/javascript\" src=\"https://www.laruence.com/wp-content/plugins/shjs-syntax-hiliter/shjs/lang/sh_php.js\"></script></p>\n<div class=\"rp4wp-related-posts\">\n<h3>Related Posts</h3>\n<ul>\n<li><div class=\"rp4wp-related-post-content\">\n<a href=\"https://www.laruence.com/2020/06/12/5902.html\">PHP 8新特性之Attributes(注解)</a></div>\n</li>\n<li><div class=\"rp4wp-related-post-content\">\n<a href=\"https://www.laruence.com/2020/06/16/5916.html\">使用SSE2指令高效实现strtolower</a></div>\n</li>\n<li><div class=\"rp4wp-related-post-content\">\n<a href=\"https://www.laruence.com/2008/08/22/404.html\">寻找函数定义在哪个模块</a></div>\n</li>\n<li><div class=\"rp4wp-related-post-content\">\n<a href=\"https://www.laruence.com/2008/11/19/625.html\">让人无语的139邮箱</a></div>\n</li>\n<li><div class=\"rp4wp-related-post-content\">\n<a href=\"https://www.laruence.com/2015/12/04/3086.html\">让PHP7达到最高性能的几个Tips</a></div>\n</li>\n</ul>\n</div>', '', 1625312846, 1625313557, 0, 0, 0.00, 0.00, '', 2, '');
INSERT INTO `kuo_cms_content` VALUES (4, 'dsagdsg', '', '', 2, '4', '', '', 0, 0, 0, 0, 0, '', '', '', '', 1625314301, 1625314586, 0, 0, 0.00, 0.00, '', 2, '');
INSERT INTO `kuo_cms_content` VALUES (5, 'dsagdsg', '', '', 2, '5', '', '', 0, 0, 0, 0, 0, '', '', '', '', 1625314488, 1625314488, 0, 0, 0.00, 0.00, '', 2, '');
INSERT INTO `kuo_cms_content` VALUES (6, '水墨中国风荷花卷轴视频片头传统文化第一讲全文案培训课件PPT中国传统文化', '中国,传统文化,文化培训,课件培训,中国传统文化,中国文化,中国风,企业文化', '是德国代购', 3, '6', '346346', '', 0, 0, 5, 0, 0, '/attachment/2021-7/png/2c12b9ecaa0008bda937cece0a085868.png', '/attachment/2021-7/png/e892da499dd8266529cf10a4ddb8e2ee.png,/attachment/2021-7/png/6d43e2583ef5053d454ab0f7dbb3a7ef.png,/attachment/2021-7/png/af38a6067fac88c5c6fb9675cbd7f014.png,/attachment/2021-7/png/e5d82c7289d2d932f003fdfe518d159f.png,/attachment/2021-7/png/26023001764cfa6ef65487911d419a52.png,/attachment/2021-7/png/8fa19c814406895d405cbaf43d023708.png,', '德特人而儿童而已&nbsp;', '', 1625316008, 1625317120, 0, 0, 100.00, 500.00, '分类:网络游戏\n描述:以前我们可能会经常使用switch做值转换类的工作，类似:以前我们可能会经常使用switch做值转换类的工作，\n版本:2.0 \n大小:7.9M ', 2, '');
INSERT INTO `kuo_cms_content` VALUES (7, '右边菜单2', '', '', 1, '7', '', '', 0, 0, 0, 0, 0, '', '', '<p>右边菜单2 状态必须关闭</p>', '', 1625318129, 1625359855, 0, 0, 0.00, 0.00, '', 0, '');
INSERT INTO `kuo_cms_content` VALUES (8, '右边菜单1', '', '', 1, '8', '', '', 0, 0, 0, 0, 0, '', '', '<p>右边菜单1</p>', '', 1625318137, 1625359837, 0, 0, 0.00, 0.00, '', 0, '');
COMMIT;

-- ----------------------------
-- Table structure for kuo_cms_type
-- ----------------------------
DROP TABLE IF EXISTS `kuo_cms_type`;
CREATE TABLE `kuo_cms_type` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '分类名字',
  `keywords` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '关键词',
  `describes` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '描述',
  `subclass` bigint unsigned DEFAULT '0' COMMENT '子分类',
  `url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '内容url',
  `link` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '外联url',
  `listtemplate` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '列表模版',
  `contenttemplate` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '内容模版',
  `templatetype` smallint unsigned DEFAULT '1' COMMENT '类型 0 单页 1 列表',
  `uid` bigint unsigned DEFAULT '0' COMMENT '用户uid',
  `adminuid` bigint unsigned DEFAULT '0' COMMENT '管理员id',
  `recommend` int unsigned DEFAULT '0' COMMENT '推荐参数',
  `sortsize` int unsigned DEFAULT '0' COMMENT '排序',
  `popularity` bigint unsigned DEFAULT '0' COMMENT '人气',
  `photo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '图片',
  `photoalbum` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '图片集',
  `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '分类内容',
  `expansion` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '扩展数据',
  `expansionform` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '扩展表单数据',
  `atime` int unsigned DEFAULT '0' COMMENT '录入时间',
  `xtime` int unsigned DEFAULT '0' COMMENT '修改时间',
  `displayswitch` smallint unsigned DEFAULT '0' COMMENT '显示开关',
  `off` smallint unsigned DEFAULT '0' COMMENT '状态0 关闭 1 审核 2 正常',
  `int1` bigint unsigned DEFAULT '0' COMMENT '数字1',
  `int2` bigint unsigned DEFAULT '0' COMMENT '数字2',
  `float1` decimal(20,2) unsigned DEFAULT '0.00' COMMENT '金额1',
  `float2` decimal(20,2) unsigned DEFAULT '0.00' COMMENT '金额2',
  `text1` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '第二备注',
  `remarks` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注',
  `Expand` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '插件调用',
  PRIMARY KEY (`id`),
  KEY `url` (`url`(250)),
  KEY `subclass` (`subclass`) USING BTREE,
  KEY `off` (`off`) USING BTREE,
  KEY `int1` (`int1`) USING BTREE,
  KEY `int2` (`int2`) USING BTREE,
  KEY `float1` (`float1`) USING BTREE,
  KEY `float2` (`float2`) USING BTREE,
  KEY `displayswitch` (`displayswitch`) USING BTREE,
  KEY `name` (`name`(250)) USING BTREE,
  KEY `keywords` (`keywords`(250)) USING BTREE,
  KEY `describes` (`describes`(250)) USING BTREE,
  KEY `subclass_off` (`subclass`,`off`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='cms分类';

-- ----------------------------
-- Records of kuo_cms_type
-- ----------------------------
BEGIN;
INSERT INTO `kuo_cms_type` VALUES (1, '阔老板', '', 'Node.js JavasSript服务框架是为了简化企业级应用敏捷开发而诞生的', 0, 'kuosfot', '', '', '', 1, 0, 0, 0, 0, 0, '/attachment/2021-7/png/6ea0e7e30b17a842a188b9c4fcdbc21c.png', '', '阔老板', '', '', 0, 1625318860, 0, 0, 0, 0, 0.00, 0.00, '', '13yd 开源项目作者.', '');
INSERT INTO `kuo_cms_type` VALUES (2, '插件扩展', '', '', 0, 'chajian', '', 'shoplist', 'shopneirong', 1, 0, 0, 0, 0, 0, '', '', '', '', '', 0, 1625318867, 1, 2, 0, 0, 0.00, 0.00, '', '', '');
INSERT INTO `kuo_cms_type` VALUES (3, '风格模版', '', '', 0, 'fengge', '', 'shoplist', 'shopneirong', 1, 0, 0, 0, 0, 0, '', '', '', '', '', 0, 1625318871, 1, 2, 0, 0, 0.00, 0.00, '', '', '');
INSERT INTO `kuo_cms_type` VALUES (4, '教程文档', '', '', 0, 'wendang', '', '', '', 1, 0, 0, 0, 0, 0, '', '', '', '', '', 0, 1625318876, 1, 2, 0, 0, 0.00, 0.00, '', '', '');
INSERT INTO `kuo_cms_type` VALUES (5, '开发笔记', '', '', 0, 'biji', '', '', '', 1, 0, 0, 0, 0, 0, '', '', '14', '', '', 0, 1625318882, 1, 2, 0, 0, 0.00, 0.00, '', '', '');
INSERT INTO `kuo_cms_type` VALUES (6, '赞助我们', '', '', 0, 'zanzhu', '', '', '', 0, 0, 0, 0, 0, 0, '', '', '', '', '', 0, 1625319359, 1, 2, 0, 0, 0.00, 0.00, '', '', '');
COMMIT;

-- ----------------------------
-- Table structure for kuo_config
-- ----------------------------
DROP TABLE IF EXISTS `kuo_config`;
CREATE TABLE `kuo_config` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '读取类型',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '配置描述',
  `data` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '配置详情',
  PRIMARY KEY (`id`),
  UNIQUE KEY `type` (`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='系统配置';

-- ----------------------------
-- Table structure for kuo_currencylog
-- ----------------------------
DROP TABLE IF EXISTS `kuo_currencylog`;
CREATE TABLE `kuo_currencylog` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `uid` bigint unsigned DEFAULT '0' COMMENT '用户uid',
  `pluginid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '插件名字',
  `type` int unsigned DEFAULT '0',
  `num` decimal(30,5) DEFAULT '0.00000',
  `data` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '详情',
  `atime` int unsigned DEFAULT '0' COMMENT '时间',
  `ip` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'ip',
  `off` bigint DEFAULT '0' COMMENT '独立标识',
  PRIMARY KEY (`id`),
  KEY `uid` (`uid`),
  KEY `pluginid` (`pluginid`),
  KEY `type` (`type`),
  KEY `atime` (`atime`),
  KEY `ip` (`ip`),
  KEY `off` (`off`),
  KEY `data` (`data`),
  KEY `num` (`num`),
  KEY `pluginid_type` (`pluginid`,`type`),
  KEY `uid_type` (`uid`,`type`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='货币日志';

-- ----------------------------
-- Table structure for kuo_features
-- ----------------------------
DROP TABLE IF EXISTS `kuo_features`;
CREATE TABLE `kuo_features` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `pluginid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '插件唯一标示',
  `type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '插件类型',
  `typeico` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '插件图标',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '插件名字',
  `describes` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '插件描述',
  `author` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '作者',
  `authorlink` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '作者的网店',
  `version` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '版本号码',
  `off` tinyint unsigned DEFAULT '0' COMMENT '插件状态',
  `branch` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '版本分支',
  `atime` int unsigned DEFAULT '0' COMMENT '录入时间',
  `authorizedid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '授权id',
  `authorizedkey` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '授权key',
  `configure` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '插件配置参数',
  `display` tinyint unsigned DEFAULT '0' COMMENT '前段显示',
  `callfunction` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '前段调用函数',
  `menuconfig` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '配置后台显示菜单',
  `main` tinyint unsigned DEFAULT '0' COMMENT '拥有的子菜显示为大菜单',
  PRIMARY KEY (`id`),
  UNIQUE KEY `pluginid` (`pluginid`),
  KEY `type` (`type`),
  KEY `type_2` (`type`,`off`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='插件列表';

-- ----------------------------
-- Records of kuo_features
-- ----------------------------
BEGIN;
INSERT INTO `kuo_features` VALUES (1, 'admin', '', 'layui-icon-console', '管理后台', '基础管理后台', 'U', 'https://www.elikj.com/', '1', 1, '', 1585446010, '', '', '{\"verifyip\":[\"关闭\",\"开启\"],\"off\":[\"关闭\",\"开启\"],\"off2\":[\"关闭\",\"开启\"],\"adminlogtype\":[\"登陆\",\"退出\",\"挤掉\",\"修改\",\"插入\",\"删除\"],\"userlogtype\":[\"登陆\",\"退出\",\"挤掉\",\"修改\",\"插入\",\"删除\"],\"currencylog\":[\"测试1\",\"唱的his2\"]}', 0, '', '{\"admin\":{\"name\":\"管理里员\",\"typeico\":\"layui-icon-friends\",\"link\":\"\"},\"admingroup\":{\"name\":\"权限管理\",\"typeico\":\"layui-icon-group\",\"link\":\"\"},\"adminlog\":{\"name\":\"管理日志\",\"typeico\":\"layui-icon-table\",\"link\":\"\"},\"features\":{\"name\":\"插件管理\",\"typeico\":\"layui-icon-engine\",\"link\":\"\"},\"config\":{\"name\":\"通用配置\",\"typeico\":\"layui-icon-set\",\"link\":\"\"},\"currencylog\":{\"name\":\"货币日志\",\"typeico\":\"layui-icon-dollar\",\"link\":\"\"},\"integrallog\":{\"name\":\"积分日志\",\"typeico\":\"layui-icon-diamond\",\"link\":\"\"},\"moneylog\":{\"name\":\"金额日志\",\"typeico\":\"layui-icon-rmb\",\"link\":\"\"},\"user\":{\"name\":\"用户管理\",\"typeico\":\"layui-icon-user\",\"link\":\"\"},\"userlog\":{\"name\":\"用户日志\",\"typeico\":\"layui-icon-list\",\"link\":\"\"},\"memcached\":{\"name\":\"数据库KV\",\"typeico\":\"layui-icon-find-fill\",\"link\":\"\"}}', 0);
INSERT INTO `kuo_features` VALUES (2, 'cms', 'cms', 'layui-icon-website', 'cms系统', '常用cms 系统', 'U', 'http://www.elikj.com', '1', 1, '', 1590801009, '', '', '{\"列表模版\":{\"0\":\"shoplist\"},\"内容模版\":{\"0\":\"shopneirong\"},\"默认前缀\":{\"0\":\"list\",\"1\":\"\"},\"默认风格\":{\"0\":\"blog\"},\"网站信息id\":{\"0\":\"1\"},\"缓存时间\":{\"0\":\"0\"}}', 1, 'index', '{\"admin_type\":{\"name\":\"分类管理\",\"typeico\":\"layui-icon-tree\",\"link\":\"\"},\"admin_content\":{\"name\":\"内容管理\",\"typeico\":\"layui-icon-table\",\"link\":\"\"}}', 0);
COMMIT;

-- ----------------------------
-- Table structure for kuo_integrallog
-- ----------------------------
DROP TABLE IF EXISTS `kuo_integrallog`;
CREATE TABLE `kuo_integrallog` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `uid` bigint unsigned DEFAULT '0' COMMENT '用户uid',
  `pluginid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '插件名字',
  `type` int unsigned DEFAULT '0',
  `num` bigint DEFAULT '0',
  `data` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '详情',
  `atime` int unsigned DEFAULT '0' COMMENT '时间',
  `ip` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'ip',
  `off` bigint DEFAULT '0' COMMENT '独立标识',
  PRIMARY KEY (`id`),
  KEY `uid` (`uid`),
  KEY `pluginid` (`pluginid`),
  KEY `type` (`type`),
  KEY `off` (`off`),
  KEY `atime` (`atime`),
  KEY `ip` (`ip`),
  KEY `data` (`data`),
  KEY `num` (`num`),
  KEY `pluginid_type` (`pluginid`,`type`),
  KEY `uid_type` (`uid`,`type`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='积分日志';

-- ----------------------------
-- Table structure for kuo_memcached
-- ----------------------------
DROP TABLE IF EXISTS `kuo_memcached`;
CREATE TABLE `kuo_memcached` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '名字',
  `keval` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '值',
  `atime` int unsigned DEFAULT '0' COMMENT '缓存时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='数据库缓存系统';

-- ----------------------------
-- Records of kuo_memcached
-- ----------------------------
BEGIN;
INSERT INTO `kuo_memcached` VALUES (1, 'plus/570d99e4c85914470d914170d1e95144', '{\"id\":2,\"pluginid\":\"cms\",\"type\":\"cms\",\"typeico\":\"layui-icon-website\",\"name\":\"cms系统\",\"describes\":\"常用cms 系统\",\"author\":\"U\",\"authorlink\":\"http://www.elikj.com\",\"version\":\"1\",\"off\":1,\"branch\":\"\",\"atime\":1590801009,\"authorizedid\":\"\",\"authorizedkey\":\"\",\"configure\":{\"列表模版\":{\"0\":\"shoplist\"},\"内容模版\":{\"0\":\"shopneirong\"},\"默认前缀\":{\"0\":\"list\",\"1\":\"\"},\"默认风格\":{\"0\":\"blog\"},\"网站信息id\":{\"0\":\"1\"},\"缓存时间\":{\"0\":\"0\"}},\"display\":1,\"callfunction\":\"index\",\"menuconfig\":{\"admin_type\":{\"name\":\"分类管理\",\"typeico\":\"layui-icon-tree\",\"link\":\"\"},\"admin_content\":{\"name\":\"内容管理\",\"typeico\":\"layui-icon-table\",\"link\":\"\"}},\"main\":0}', 0);
INSERT INTO `kuo_memcached` VALUES (2, 'session/f6r39n2lw5kya42l8z64nnf9d28z44ls7623a52zr5iyb62rak6nu6f9i2a004mw', '{\"code\":4,\"adminid\":1,\"groups\":0,\"account\":\"admin\"}', 1640857945);
INSERT INTO `kuo_memcached` VALUES (3, 'adminip/1', '\"192.168.1.13\"', 0);
INSERT INTO `kuo_memcached` VALUES (4, 'adminid/1', '{\"id\":1,\"account\":\"admin\",\"password\":\"cac01bfe0422801a36\",\"area\":0,\"super\":\"\",\"groups\":0,\"verifyip\":0,\"off\":1,\"ip\":\"192.168.1.13\",\"atime\":1625357133,\"sessionid\":\"q6r2bq2k65v0893dap57uj07o29ou11la6g28k2ym5rhbu3k9x5s47r7r294m1xi\"}', 0);
INSERT INTO `kuo_memcached` VALUES (5, 'safetoken/1', '\"h6698m27-p56h-b43d-9k63-c9a07290a49p\"', 0);
INSERT INTO `kuo_memcached` VALUES (6, 'plus/21232f297a57a5a743894a0e4a801fc3', '{\"id\":1,\"pluginid\":\"admin\",\"type\":\"\",\"typeico\":\"layui-icon-console\",\"name\":\"管理后台\",\"describes\":\"基础管理后台\",\"author\":\"U\",\"authorlink\":\"https://www.elikj.com/\",\"version\":\"1\",\"off\":1,\"branch\":\"\",\"atime\":1585446010,\"authorizedid\":\"\",\"authorizedkey\":\"\",\"configure\":{\"verifyip\":[\"关闭\",\"开启\"],\"off\":[\"关闭\",\"开启\"],\"off2\":[\"关闭\",\"开启\"],\"adminlogtype\":[\"登陆\",\"退出\",\"挤掉\",\"修改\",\"插入\",\"删除\"],\"userlogtype\":[\"登陆\",\"退出\",\"挤掉\",\"修改\",\"插入\",\"删除\"],\"currencylog\":[\"测试1\",\"唱的his2\"]},\"display\":0,\"callfunction\":\"\",\"menuconfig\":{\"admin\":{\"name\":\"管理里员\",\"typeico\":\"layui-icon-friends\",\"link\":\"\"},\"admingroup\":{\"name\":\"权限管理\",\"typeico\":\"layui-icon-group\",\"link\":\"\"},\"adminlog\":{\"name\":\"管理日志\",\"typeico\":\"layui-icon-table\",\"link\":\"\"},\"features\":{\"name\":\"插件管理\",\"typeico\":\"layui-icon-engine\",\"link\":\"\"},\"config\":{\"name\":\"通用配置\",\"typeico\":\"layui-icon-set\",\"link\":\"\"},\"currencylog\":{\"name\":\"货币日志\",\"typeico\":\"layui-icon-dollar\",\"link\":\"\"},\"integrallog\":{\"name\":\"积分日志\",\"typeico\":\"layui-icon-diamond\",\"link\":\"\"},\"moneylog\":{\"name\":\"金额日志\",\"typeico\":\"layui-icon-rmb\",\"link\":\"\"},\"user\":{\"name\":\"用户管理\",\"typeico\":\"layui-icon-user\",\"link\":\"\"},\"userlog\":{\"name\":\"用户日志\",\"typeico\":\"layui-icon-list\",\"link\":\"\"},\"memcached\":{\"name\":\"数据库KV\",\"typeico\":\"layui-icon-find-fill\",\"link\":\"\"}},\"main\":0}', 0);
INSERT INTO `kuo_memcached` VALUES (7, 'session/q6r2bq2k65v0893dap57uj07o29ou11la6g28k2ym5rhbu3k9x5s47r7r294m1xi', '{\"code\":50,\"adminid\":1,\"groups\":0,\"account\":\"admin\"}', 1640909133);
COMMIT;

-- ----------------------------
-- Table structure for kuo_moneylog
-- ----------------------------
DROP TABLE IF EXISTS `kuo_moneylog`;
CREATE TABLE `kuo_moneylog` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `uid` bigint unsigned DEFAULT '0' COMMENT '用户uid',
  `pluginid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '插件名字',
  `type` int unsigned DEFAULT '0',
  `num` decimal(30,5) DEFAULT '0.00000',
  `data` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '详情',
  `atime` int unsigned DEFAULT '0' COMMENT '时间',
  `ip` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'ip',
  `off` bigint DEFAULT '0' COMMENT '独立标识',
  PRIMARY KEY (`id`),
  KEY `uid` (`uid`),
  KEY `off` (`off`),
  KEY `pluginid` (`pluginid`),
  KEY `type` (`type`),
  KEY `atime` (`atime`),
  KEY `ip` (`ip`),
  KEY `data` (`data`),
  KEY `num` (`num`),
  KEY `pluginid_type` (`pluginid`,`type`),
  KEY `uid_type` (`uid`,`type`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='金额日志';

-- ----------------------------
-- Table structure for kuo_user
-- ----------------------------
DROP TABLE IF EXISTS `kuo_user`;
CREATE TABLE `kuo_user` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `nickname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '昵称',
  `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '头像',
  `super` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '超级密码',
  `recharge` decimal(30,5) unsigned DEFAULT '0.00000' COMMENT '已经充值金额',
  `money` decimal(30,5) unsigned DEFAULT '0.00000' COMMENT '金额',
  `integral` bigint unsigned DEFAULT '0' COMMENT '积分',
  `currency` decimal(30,5) unsigned DEFAULT '0.00000' COMMENT '货币',
  `accountoff` tinyint unsigned DEFAULT '0' COMMENT '帐户状态',
  `fullname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '姓名',
  `identity` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '身份号',
  `sex` tinyint DEFAULT '-1' COMMENT '性别',
  `grade` int unsigned DEFAULT '0' COMMENT '等级',
  `level` bigint unsigned DEFAULT '0' COMMENT '级别',
  `age` int unsigned DEFAULT '0' COMMENT '年龄',
  `regtime` int unsigned DEFAULT '0' COMMENT '注册时间',
  `regip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '注册ip',
  `logintime` int unsigned DEFAULT '0' COMMENT '登录时间',
  `loginip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '登录ip',
  `security` char(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '防止重复注册',
  `verifyip` tinyint unsigned DEFAULT '0' COMMENT '验证IP',
  `superior0` bigint unsigned DEFAULT '0' COMMENT '一级',
  `superior1` bigint unsigned DEFAULT '0' COMMENT '二级',
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`),
  UNIQUE KEY `security` (`security`),
  KEY `accountoff` (`accountoff`),
  KEY `nickname` (`nickname`),
  KEY `superior0` (`superior0`),
  KEY `superior1` (`superior1`),
  KEY `id_2` (`id`,`money`),
  KEY `id_3` (`id`,`integral`),
  KEY `id_4` (`id`,`currency`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='基础用户表';

-- ----------------------------
-- Table structure for kuo_userlog
-- ----------------------------
DROP TABLE IF EXISTS `kuo_userlog`;
CREATE TABLE `kuo_userlog` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '日志id',
  `uid` bigint unsigned DEFAULT '0' COMMENT '管理uid',
  `type` int unsigned DEFAULT '0' COMMENT '日志类型',
  `data` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '详细数据',
  `ip` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '产生ip',
  `atime` int unsigned DEFAULT '0' COMMENT '时间',
  `controller` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '控制器',
  `mode` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '处理方式',
  PRIMARY KEY (`id`),
  KEY `uid` (`uid`),
  KEY `type` (`type`),
  KEY `controller` (`controller`(250)),
  KEY `mode` (`mode`(250))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='user日志';

SET FOREIGN_KEY_CHECKS = 1;
